正则表达式行开头的字符集

hig*_*dth 15 python regex

假设我想搜索出现在行首或出现'a'的'b'.

为什么不re.match('[\^a]b','b')匹配re.match('^b','b')呢?

更新:我意识到我应该使用search而不是match.我希望它对'b','cab','ab','bc'和'abd'之类的东西都是积极的.

And*_*ark 17

正则表达式[\^a]b将匹配ab^b,因此它不应匹配字符串'b'.

请注意,re.match()只匹配字符串开头的匹配项,就好像在正则表达式的开头有一个字符串锚点的开头(^\A启用了多行选项).

因此,"要搜索出现在行首或出现'a'的'b',您需要使用re.search()以下正则表达式:

(^|a)b
Run Code Online (Sandbox Code Playgroud)

请注意,我对此的解释与其他答案略有不同,我认为您的要求意味着您要匹配'b' 'bob'以及abin 'taboo',因此行要求的起点仅适用于b不在其前面的行a.

该组中交替的这种方法可以让你多了一个可扩展的解决方案^b|ab,因此如果要匹配b的字符串的开头或者当preceeded a,x,2,或者5你可以使用以下命令:

(^|[ax25])b
Run Code Online (Sandbox Code Playgroud)

  • 你不能.字符类总是只表示一个字符,因此您不能将锚点放入字符类中. (4认同)

Nul*_*ion 10

你的第一个正则表达式真的意味着:

[\^a]b   # match a literal '^' or 'a', followed by a 'b'
Run Code Online (Sandbox Code Playgroud)

你的第二个正则表达式:

^b       # match start of line followed by a 'b'
Run Code Online (Sandbox Code Playgroud)

你真正想要的第一个正则表达式是:

^b|ab    # match start of line followed by a 'b', 
         # OR 
         # an 'a' followed by a 'b'
Run Code Online (Sandbox Code Playgroud)

另请注意re.match(),re.search()如果要查找出现在字符串中间的字符串,请自动尝试从头开始查找匹配项.

假设我想搜索一行开头或'a',或'x',或'2'或'5',后跟'b'.我不能[^ax25]b代替^b|ab|xb|2b|5b吗?

在那种情况下,我会这样做:

(^|[ax25])b
Run Code Online (Sandbox Code Playgroud)

字符类只能包含字符.插入符号(^)特殊含义为匹配字符串开头的零宽度断言在字符类中更改:如果它的第一个字符可以否定整个字符类,或者^如果它被转义或放在别处则表示字面插入符号().