python - 使用正则表达式使用反斜杠分割字符串

标签 python regex string split

对于 python 程序,我有一个从 stdin 获取的输入,输入类似于:

"-------/--------\---------/------\"

当我将其打印为字符串值时,它会按原样打印。我试图将字符串拆分为基于正斜杠和反斜杠的字符串列表,同时保留分隔符。我用过这样的东西:

re.split('(\\/)',string)

但我得到的结果是:

['------' , '/' , '--------\\\\---------' , '/' , '---------\\\']

我更希望它是这样的:

['------' , '/' , '---------' , '\' , '---------', '/' , '---------' , '\']

我在这里做错了什么以及如何解决这个问题?

最佳答案

要捕获分隔符,使用 findall 而不是 split 更容易:

re.findall(r'[^\\/]+|[\\/]', string)

[^\\/]+ 将查找 1 次或多次出现的不包含正斜杠或反斜杠的子字符串。 | 用作或运算符。最后,[\\/] 将匹配正斜杠和反斜杠的出现。结果将为出现的正斜杠和反斜杠以及未出现的字符串匹配提供单独的子字符串。

至于为什么你的代码不起作用,你的表达式是(\\/)。当 Python 解释器解析它时,它会看到一个转义斜杠并创建一个由四个字符组成的字符串:(\/)。然后,该字符串被发送到正则表达式引擎,该引擎也会进行转义。它看到一个斜杠后面跟着一个反斜杠,并且由于反斜杠并不特殊,它会“转义”到自身,因此最终的表达式只是 (/)。最后,重新应用此表达式,用反斜杠分隔并捕获它 - 正是您所观察到的。

由于双重转义,您的方法的正确命令是 re.split('([\\\/])',string)

故事的寓意:始终将原始文字 r"..." 与正则表达式一起使用,以避免双重转义问题。

关于python - 使用正则表达式使用反斜杠分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23360441/

相关文章:

python - 使用 DataFrame 索引作为 x 轴刻度

c# - 如何正确编写正则表达式以匹配特定的起始数字?

python - 分离轴定理和Python

python - matplotlib 基线倾斜的 3d 多边形图

asp.net - 图像的正则表达式?

javascript - 如何替换 javascript 中字符串的前两个字符?

mysql - 如何在MySQL中提取第一个数字之前的字符串部分?

string - 如何使用Mapforce中的tokenize函数来分割字符串

python - Django Celery 任务记录

php - 删除包含开始 php 标记和空行的文件