我有一个following regular expression(Python),我在下面这一点上不明白。为什么它和第一次的不匹配呢?你知道吗
正则表达式(用空格隔开以便更好地理解):
(?:
\$\{
(?P<braced>
[_a-zA-Z][a-zA-Z0-9]*(?::[_a-zA-Z][_a-zA-Z0-9]*)+
)
\}
)
| ### SECOND ALTERNATION ###
(?:
\$
(?P<named>
[_a-zA-Z][a-zA-Z0-9]*(?::[_a-zA-Z][_a-zA-Z0-9]*)+
)
)
测试字符串:
阿斯达斯德$自闭症:sd+${asd123:asd}$主页$$asd
匹配的内容:
asdasd$房间隔缺损:sd+${asd123:asd}$主页$$asd
根据上面的正则表达式模式,第一个替换也应该出现,即:
${asd123:asd}
我好像不太明白交替的模式?你知道吗
您的模式运行得很好,您只需将其与
finditer
一起使用即可执行全局研究并获得整个匹配:(
findall
(也执行全局研究)的问题是,当模式中有捕获组时,结果只包含捕获组内容的列表,而不包含整个匹配结果。因此,根据stribizhev的建议,将所有内容都包含在一个捕获组中可以是一种使用findall
的方法。你知道吗您需要添加
g
修饰符来获取regex101.com上的所有匹配项https://www.regex101.com/r/nP8pK0/1
为了捕获
${...}
,您需要移除?:
,将非捕获组变成捕获组。你也可以叫他们名字。而且[\u a-zA-Z0-9]等于\w,因此我们可以稍微缩短您的正则表达式:看看demo。这个regex需要使用
x
选项(以及regex101.com上的g
选项来显示所有匹配项,在Python中,您可以使用findall
或finditer
)。你知道吗有关non-capturing groups的更多信息,请访问SO和regular-expressions.info。你知道吗
要在Python中获取所有匹配项,可以使用
finditer
如下所示:见IDEONE demo
相关问题 更多 >
编程相关推荐