2024-09-30 22:24:48 发布
网友
我很难使正则表达式匹配字符串ka toki.*(例如ka toki或ka toki knfjk),但如果toki之后的第一个符号是a,则无法匹配
ka toki.*
ka toki
ka toki knfjk
toki
a
换言之,我试图匹配这些:
ka toki ka toki sadbkhbhd habsd ka tokijhvkhsd
但不是这些:
ka tokia ka tokia asdibasd ka tokiaasdgjkn
使用alternation可选择不跟字符的大小写和跟字符以外的字符的大小写:
ka toki($|[^A].*)
见https://www.regular-expressions.info/alternation.html
要匹配一个以ka toki开头而不跟在a后面的整个字符串,可以使用
re.match(r'ka toki(?!a).*$', s)
Python的re.match将匹配锚定在字符串的开头,因此,可以省略^ka toki(?!a).*$模式开头的^锚定
re.match
^ka toki(?!a).*$
^
参见regex demo
图案细节
(?!a)
.*
re.DOTALL
re.S
$
请注意,通过在可选组中使用求反字符类,无需环顾即可实现相同的效果:
re.match(r'ka toki(?:[^a].*)?$', s)
见another regex demo
这里,(?:[^a].*)?是一个可选的非捕获组,它匹配除a(使用[^a])之外的任何字符的1或0次出现,然后.*匹配字符串的其余部分
(?:[^a].*)?
[^a]
使用alternation可选择不跟字符的大小写和跟字符以外的字符的大小写:
见https://www.regular-expressions.info/alternation.html
要匹配一个以
ka toki
开头而不跟在a
后面的整个字符串,可以使用Python的
re.match
将匹配锚定在字符串的开头,因此,可以省略^ka toki(?!a).*$
模式开头的^
锚定参见regex demo
图案细节
^
—字符串的开头(隐式在^{ka toki
-文字子串(?!a)
-如果a
字符跟在ka toki
子字符串后面,则匹配失败的负lookahead.*
-行的其余部分,0+个字符,而不是换行符(您可以使用re.DOTALL
或re.S
使其跨行匹配)$
-字符串的结尾(实际上,如果只需要单行匹配,则可以省略它)李>请注意,通过在可选组中使用求反字符类,无需环顾即可实现相同的效果:
见another regex demo
这里,
(?:[^a].*)?
是一个可选的非捕获组,它匹配除a
(使用[^a]
)之外的任何字符的1或0次出现,然后.*
匹配字符串的其余部分相关问题 更多 >
编程相关推荐