我正在构建一个必须匹配以特定符号开头的特定模式的正则表达式,但同时它必须不匹配以两个或多个相同特定符号出现的模式。
为了更好地阐述,这是我的方案。我有一个这样的字符串:
Hello %partials/footer/mail,
%no_slashes_here
%{using_braces}_here
%%should_not_be_matched
我尝试匹配那些以一个%
符号开头的子串(因为在我的情况下,双%%
表示"转义"并且不应该它们可以选择用花括号包围。最后,我需要捕获匹配的子串,但没有%
符号。
到目前为止,我的正则表达式是:
%\{*([0-9a-zA-Z_/]+)\}*
捕获的匹配结果为:
partials/footer/mail
no_slashes_here
using_braces
should_not_be_matched
这与我需要的非常接近,但我陷入了双%%
逃脱的部分。我不知道如何在开头时否定两个或多个%
符号,同时也允许在开头只出现一次。
修改 很抱歉,我错过了,我使用的是python。
答案 0 :(得分:2)
答案 1 :(得分:1)
如果这是基于行的 - 你可以这样做:
(?:^|[^%])%\{?([^%}]+)\}?
Python演示:
txt='''\
Hello %partials/footer/mail,
%no_slashes_here
%{using_braces}_here
%%should_not_be_matched
This %% niether'''
import re
for line in txt.splitlines():
m=re.search(r'(?:^|[^%])%\{?([^%}]+)\}?', line)
if m:
print m.group(1)
从您的问题中不清楚% this % should be treated
答案 2 :(得分:-1)