Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式:如果转义字符,则解析方式不同_Python_Regex - Fatal编程技术网

Python 正则表达式:如果转义字符,则解析方式不同

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=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']
。我尝试了下面的正则表达式,但不起作用:

r'[a-zA-Z0-9\-_\+;(\\,)]+'
基本上是尝试将字符序列添加到要匹配的字符列表中。

您可以使用

[a-zA-Z0-9_+;-]+(?:\\,[a-zA-Z0-9_+;-]+)*

如果将
re.A
re.ASCII
传递到
re.compile
,则可以将其缩短为

[\w+;-]+(?:\\,[\w+;-]+)*
正则表达式详细信息

  • [\w+;-]+
    -一个或多个单词,
    +
    -
    字符
  • (?:\\,[\w+;-]+)*
    -0或更多次出现
    \,
    子字符串,后跟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']