Python 正则表达式匹配逗号或换行符,但不能同时匹配两者
下面的python脚本从公司内部web应用程序文本区域的文本中提取一些选项,我遇到了一个问题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
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给了你一个更完整的答案,因为他们建议你在比赛中分道扬镳。如果里面什么都没有的话,我通常会把它给那些代表性最少的人