Python 正则表达式匹配逗号或换行符,但不能同时匹配两者

Python 正则表达式匹配逗号或换行符,但不能同时匹配两者,python,regex,delimited-text,Python,Regex,Delimited Text,下面的python脚本从公司内部web应用程序文本区域的文本中提取一些选项,我遇到了一个问题 import re text = 'option one\noption two, option three, option four' correct = 'option one, option two, option three, option four' pattern = re.compile('(\s*[,]\s*)') fixed = pattern.sub(', ', text) p

下面的python脚本从公司内部web应用程序文本区域的文本中提取一些选项,我遇到了一个问题

import re

text = 'option one\noption two, option three, option four'
correct = 'option one, option two, option three, option four'

pattern = re.compile('(\s*[,]\s*)')
fixed = pattern.sub(', ', text)

print fixed
option one
option two, option three, option four

print fixed.split(', ')
['option one\noption two', 'option three', 'option four']
这显然无法将“选项一\n选项二”拆分为“选项一”、“选项二”

因此,输入结果可能是

option one
option two, option three, option four
需要转换为

option one, option two, option three, option four
如果是逗号,它就可以正常工作

后跟换行符的逗号

但如果这只是一条新行,就不会了。

你能试试吗

(\s*(,|\n)\s*)
?

或者可能更好

(\s*[,\n]\s*)

…我总是忘记你可以把
\n
放在一个字符类中…

也许可以把你的字符类从
[,]
扩展到
[,\n]
?还有,为什么不直接在正则表达式上拆分,而不是先搜索并替换,然后拆分?这个函数:可以很方便地使用。

我在没有正则表达式的情况下实现了:

print [x.strip() for x in text.replace('\n', ', ').split(', ')]
结果:

['option one', 'option two', 'option three', 'option four']

我并不是说这是对您的用例的一个很好的回答。如果需要添加额外的分隔符,则意味着为每个分隔符添加一个额外的
.replace()

re.split
确实是答案。我甚至从未注意到有点奇怪的拆分方法!但无论如何,我不是蟒蛇……:)很好,“(\s*[,\n]\s*)”工作得很好,谢谢tdammers:-)我刚刚看过re.split,这也是我以前从未见过的。这显然比我的尝试更明智。我尝试过重新拆分(“(\s*[,\n]\s*),text)并将其返回所有逗号作为数组项,例如[“选项一”,“选项二”,“选项三”,“选项四]]。知道为什么会这样吗?那是因为你使用的是一个捕获组。抛开括号,它应该会起作用-也就是说,
'\s*[,\n]\s*'
而不是
'(\s*[,\n]\s*)”
啊,对不起,我没有注意到你先给出了正确的答案,发生这种情况时“做了什么?”我不知道,因为这是我的第一个问题…@nih这不是问题。虽然我想说的是,tdammers给了你一个更完整的答案,因为他们建议你在比赛中分道扬镳。如果里面什么都没有的话,我通常会把它给那些代表性最少的人