我有这样一根线:
<hello<world<1 \< 2>
,表示三个字符串的列表"hello", "world", "1 < 2"
。我希望我的正则表达式能够匹配("hello", "world", "1 \< 2")
。(我将在稍后的评估中删除反斜杠)。我使用以下正则表达式来匹配文本:
r"(?:<((?:[^<>]|\\.)*))+>"
按照我的理解,它至少匹配一个(<
与任何数量的非<>
或\anything
在它之后),然后匹配一个结束的>
,但结果并不表明这一点。使用re.match(..., ...).groups()
,我得到以下结果:
>>> import re
>>> re.match(r"(?:<((?:[^<>]|\\.)*))+>", r"<hello<world<1 \< 2>").groups()
<<< (' 2',)
>>> re.match(r"(?:<((?:[^<>]|\\.)*))+>", r"<hello<world<1 \< 2>").group(0)
<<< '<hello<world<1 \\< 2>'
令人困惑的是group(0)
甚至不在groups()
中,而且其他子字符串似乎不在group(...)
中。我的正则表达式或方法是否有问题,应该如何修复?你知道吗
要清楚的是,我正在使用regex为一种高尔夫语言构建一个lexer,所以用char-by-char lexer之类的东西来替换它会很不方便,因为我已经设置了正则表达式lexer和大多数表达式。我想知道纯正则表达式的解决方案是否可行。你知道吗
你可以试试这个:
输出:
相关问题 更多 >
编程相关推荐