鉴于此字符串"foo-bar=369,337,234,123",我可以['foo-bar', '369', '337', '234', '123]使用此正则表达式将其解析为:re.findall(r'[a-zA-Z0-9\-_\+;]+', 'foo-bar=369,337,234,123'),现在,如果我对字符串中的某些部分进行转义,例如"foo-bar=369\,337\,234,123",我希望它的解析方式有所不同:['foo-bar', '369\,337\,234', '123']。我尝试了下面的正则表达式,但它不起作用:r'[a-zA-Z0-9\-_\+;(\\,)]+'基本上是尝试将字符序列添加\,到要匹配的字符列表中。
1 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
你可以使用
[a-zA-Z0-9_+;-]+(?:\\,[a-zA-Z0-9_+;-]+)*
请参阅正则表达式演示
如果您通过re.A
或re.ASCII
到re.compile
,您可以将其缩短为
[\w+;-]+(?:\\,[\w+;-]+)*
正则表达式详细信息
[\w+;-]+
- 一个或多个单词+
、;
或-
字符(?:\\,[\w+;-]+)*
- 0 次或多次出现\,
后跟 1+ 个单词、+
或;
字符的-
子字符串。
import re
strings = [r'foo-bar=369,337,234,123', r'foo-bar=369\,337\,234,123']
rx = re.compile(r"[\w+;-]+(?:\\,[\w+;-]+)*", re.A)
for s in strings:
print(f"Parsing {s}")
print(rx.findall(s))
输出:
Parsing foo-bar=369,337,234,123
['foo-bar', '369', '337', '234', '123']
Parsing foo-bar=369\,337\,234,123
['foo-bar', '369\\,337\\,234', '123']
请注意此处的双反斜杠,在字符串文字内,表示单个文字反斜杠。
添加回答
举报
0/150
提交
取消