用于匹配字符串的正则表达式,如果该字符串以特定字符结尾,则不匹配

2024-09-30 22:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难使正则表达式匹配字符串ka toki.*(例如ka tokika toki knfjk),但如果toki之后的第一个符号是a,则无法匹配

换言之,我试图匹配这些:

ka toki
ka toki sadbkhbhd habsd
ka tokijhvkhsd

但不是这些:

ka tokia
ka tokia asdibasd
ka tokiaasdgjkn

Tags: 字符串符号katokisadbkhbhdasdibasdtokiatokiaasdgjkn
2条回答

使用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).*$模式开头的^锚定

参见regex demo

图案细节

  • ^—字符串的开头(隐式在^{}中)
  • ka toki-文字子串
  • (?!a)-如果a字符跟在ka toki子字符串后面,则匹配失败的负lookahead
  • .*-行的其余部分,0+个字符,而不是换行符(您可以使用re.DOTALLre.S使其跨行匹配)
  • $-字符串的结尾(实际上,如果只需要单行匹配,则可以省略它)

请注意,通过在可选组中使用求反字符类,无需环顾即可实现相同的效果:

re.match(r'ka toki(?:[^a].*)?$', s)

another regex demo

这里,(?:[^a].*)?是一个可选的非捕获组,它匹配除a(使用[^a])之外的任何字符的1或0次出现,然后.*匹配字符串的其余部分

相关问题 更多 >