假设我想搜索出现在行首或出现'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)
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)
字符类只能包含字符.插入符号(^)特殊含义为匹配字符串开头的零宽度断言在字符类中更改:如果它的第一个字符可以否定整个字符类,或者^如果它被转义或放在别处则表示字面插入符号().
| 归档时间: |
|
| 查看次数: |
12662 次 |
| 最近记录: |