Python 正则表达式:如果转义字符,则解析方式不同
给定此字符串“foo-bar=369337234123”,我可以使用以下正则表达式将其解析为Python 正则表达式:如果转义字符,则解析方式不同,python,regex,Python,Regex,给定此字符串“foo-bar=369337234123”,我可以使用以下正则表达式将其解析为['foo-bar',369',337',234',123]: re.findall(r'[a-zA-Z0-9\-_\+;]+', 'foo-bar=369,337,234,123') 现在,如果我转义字符串中的一些,,例如“foo-bar=369\,337\,234123”,我希望它的解析有点不同:['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\,234123”
,我希望它的解析有点不同:['foo-bar',369\,337\,234',123']
。我尝试了下面的正则表达式,但不起作用:
r'[a-zA-Z0-9\-_\+;(\\,)]+'
基本上是尝试将字符序列添加到要匹配的字符列表中。您可以使用
[a-zA-Z0-9_+;-]+(?:\\,[a-zA-Z0-9_+;-]+)*
见
如果将re.A
或re.ASCII
传递到re.compile
,则可以将其缩短为
[\w+;-]+(?:\\,[\w+;-]+)*
正则表达式详细信息
-一个或多个单词,[\w+;-]+
,+
代码>或
字符-
-0或更多次出现(?:\\,[\w+;-]+)*
子字符串,后跟1+字,\,
,+
代码>或
字符-
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']
注意这里的双反斜杠,在字符串文本中,表示单个文本反斜杠。@BiBi我添加了regex细节。我仍然不明白为什么我们需要使用非捕获组。
?:
@BiBi请参见
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']