杰瑞科技汇

python 正则表达式 以什么开头

^

^ 是一个锚点(Anchor),它表示匹配字符串的开头位置。

核心要点:

  • 它匹配的是位置,而不是一个具体的字符。
  • 当它用在字符集(方括号 [])内部时,含义会变为“取反”,这一点要特别注意。

示例 1:匹配以 "Hello" 开头的字符串

import re
text1 = "Hello, world!"
text2 = "Say Hello to the world."
text3 = "hello, world!" # 注意大小写
# 正则表达式:^Hello
# ^ 表示字符串的开头,Hello 是需要匹配的字符
pattern = r"^Hello"
# re.match() 函数会从字符串的开头开始尝试匹配
if re.match(pattern, text1):
    print(f"'{text1}' 匹配成功!")  # 会输出
if re.match(pattern, text2):
    print(f"'{text2}' 匹配成功!") # 不会输出
if re.match(pattern, text3):
    print(f"'{text3}' 匹配成功!") # 不会输出,因为 'h' 不等于 'H'

输出:

'Hello, world!' 匹配成功!

示例 2:匹配以一个数字开头的行

如果你想检查一行文本是否以数字开头,可以这样写:

import re
lines = [
    "123 is a number.",
    "abc is not a number.",
    " 456 has a space before it." # 注意开头有空格
]
pattern = r"^\d" # ^ 表示行首,\d 表示任意一个数字
for line in lines:
    if re.match(pattern, line):
        print(f"行首是数字: '{line}'")
    else:
        print(f"行首不是数字: '{line}'")

输出:

行首是数字: '123 is a number.'
行首不是数字: 'abc is not a number.'
行首不是数字: ' 456 has a space before it.'

注意: re.match() 不会跳过前导空格,如果需要匹配“第一个非空白字符是数字”,则需要使用 \s* 来跳过空格,pattern = r"^\s*\d"


Python re 模块的便捷方法:re.fullmatch()

我们想检查整个字符串是否完全符合某个模式,并且这个模式本身就隐含了“以...开头”和“以...的意思。

re.fullmatch(pattern, string) 会要求整个 string 必须完全被 pattern 匹配。

示例:匹配一个完整的手机号(假设手机号规则)

假设我们想验证一个字符串是否是一个完整的、以 1 开头,共11位的数字。

import re
phone1 = "13812345678"
phone2 = "138-1234-5678"
phone3 = "123456789"  # 太短
phone4 = "hello world" # 不是数字
# 正则表达式:^1\d{10}$
# ^1 表示以1开头
# \d{10} 表示后面跟着10个数字
# $ 表示字符串的结尾(见下文)
pattern = r"^1\d{10}$"
# 使用 re.fullmatch() 来检查整个字符串
if re.fullmatch(pattern, phone1):
    print(f"'{phone1}' 是一个有效的手机号格式。") # 会输出
if re.fullmatch(pattern, phone2):
    print(f"'{phone2}' 是一个有效的手机号格式。") # 不会输出,因为有 '-'
if re.fullmatch(pattern, phone3):
    print(f"'{phone3}' 是一个有效的手机号格式。") # 不会输出,因为长度不够
if re.fullmatch(pattern, phone4):
    print(f"'{phone4}' 是一个有效的手机号格式。") # 不会输出

输出:

'13812345678' 是一个有效的手机号格式。

在这个例子中,^ 和 一起使用,确保了从开头到结尾都必须符合模式,re.fullmatch() 的行为就等同于 ^...$ 的匹配。


功能/方法 描述 示例 适用场景
^ (锚点) 正则表达式语法,匹配字符串的开头位置。 pattern = r"^Hello" 当你只想检查字符串的开头是否符合某个模式,而不关心结尾时,从日志文件中筛选出以 "ERROR" 开头的行。
re.fullmatch() Python re 模块的方法,要求整个字符串完全匹配模式。 if re.fullmatch(r"^\d+$", s): 当你需要验证一个字符串的整体格式时,验证用户输入的ID、手机号、邮政编码等是否完全符合要求。

相关知识: (字符串结尾)

为了完整性,必须提到 ,它是 ^ 的对应符号,表示字符串的结尾位置。

  • ^Hello:以 "Hello" 开头。
  • world$:以 "world"
  • ^Hello world$:整个字符串必须是 "Hello world"。

一个重要的注意事项:re.MULTILINE (多行模式)

默认情况下,^ 和 只匹配整个字符串的开头和结尾,如果你正在处理一个包含多行文本的字符串(用换行符 \n 分隔的文本),并希望 ^ 匹配每一行的开头, 匹配每一行的结尾,你需要使用 re.MULTILINE 标志。

import re
text = """
First line.
Second line.
Third line.
"""
# 默认模式 (re.MULTILINE 未设置)
# ^ 只匹配整个字符串的开头,即 "First line." 的前面
pattern_default = r"^Second"
print("默认模式:")
if re.search(pattern_default, text):
    print("找到了!") # 不会输出,因为 "Second" 不在字符串开头
else:
    print("没找到。")
# 多行模式 (re.MULTILINE 设置)
# ^ 会匹配每一行的开头
pattern_multiline = r"^Second"
print("\n多行模式:")
if re.search(pattern_multiline, text, re.MULTILINE):
    print("找到了!") # 会输出
else:
    print("没找到。")

输出:

默认模式:
没找到。
多行模式:
找到了!
  • 要表示“以什么开头”,在正则表达式中使用 ^ 锚点。
  • re.match() 会从字符串开头开始匹配,是使用 ^ 的常见场景。
  • 如果要验证整个字符串的格式,可以使用 re.fullmatch(),它隐含了从头到尾的匹配。
  • 处理多行文本时,记得使用 re.MULTILINE 标志,让 ^ 和 作用于每一行。
分享:
扫描分享到社交APP
上一篇
下一篇