正则表达式匹配逗号或换行符,但不是两者

时间:2012-05-04 10:18:16

标签: 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)

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

print fixed.split(', ')
['option one\noption two', 'option three', 'option four']

这显然未能将'选项一\ n选项2'拆分为'选项一','选项二'

因此输入可能最终为

option one
option two, option three, option four

需要转换为

option one, option two, option three, option four

如果是逗号

,它可以正常工作

逗号后跟换行符

但是如果它本身就只是一个新行。

3 个答案:

答案 0 :(得分:4)

将您的角色类从[,]扩展到[,\n],也许?另外,为什么不直接拆分正则表达式,而不是先搜索和替换然后拆分?这个功能:http://docs.python.org/library/re.html?highlight=re.split#re.split可以派上用场。

答案 1 :(得分:3)

你能试试吗

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

或者甚至可能更好

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

...我总是忘记你可以将\n放入角色等级......

答案 2 :(得分:2)

我没有正则表达式就到了那里:

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

结果:

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

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