我试图捕获类似于%a
、%b
等的字符串片段,并用一些值替换它们。此外,我希望能够通过输入%%
来转义%
字符。
在一个示例字符串%d%%f%x%%%g
中,我想匹配%d%%f%x%%%g
(即%d
、%x
、%g
)。
我的正则表达式如下:
(?:[^%]|^)(?:%%)*(%[a-z])
(?:[^%]|^)
- 匹配行的开头或与%
不同的字符(?:%%)*
- 匹配 0 或多个%%
(转义后的%
)(%[a-z])
- 匹配%a
,%b
等模式
前两个元素用于支持转义%
字符。
然而,运行该正则表达式在示例字符串上时,最后一段 (%g
) 没有被找到:
>>> import re
>>> pat = re.compile("(?:[^%]|^)(?:%%)*(%[a-z])")
>>> pat.findall("%d%%f%x%%%g")
['%d', '%x']
但在%%%g
之前添加一个字符后,它开始正常工作:
>>> pat.findall("%d%%f%x %%%g")
['%d', '%x', '%g']
看起来在匹配到组(%[a-z])
后,x
没有再次与[^%]
匹配。我该如何更改正则表达式以强制其再次检查上一个匹配的最后一个字符?我了解了\G
,但它并没有帮助。