在换行符上拆分,但不是空格换行符

时间:2015-03-05 02:49:27

标签: python regex

我试图拆分换行符,如果它没有直接前面的空格。例如:

CA, The title\n # yes
CA, the title \n # no

要拆分任何换行符,我可以lines = contents.split('\r\n')。我怎么做修改后的拆分?

4 个答案:

答案 0 :(得分:5)

您需要使用负面的后置断言。引用re doc,

  

<强> (?<!...)

     

如果字符串中的当前位置前面没有匹配....,则匹配这称为负后瞻性断言

所以你的RegEx会像这样工作

data = """CA, The title
CA, the title 
data"""

import re
print re.split(r'(?<!\s)\n', data)
# ['CA, The title', 'CA, the title \ndata']

在这里,(?<!\s)告诉RegEx引擎,只有当它前面没有\s(这意味着任何空格字符)时才匹配此后的字符串。

re doc,

引用\s的文档
  

如果未指定UNICODE标志,则它与任何空格字符匹配,这相当于集合[ \t\n\r\f\v]

答案 1 :(得分:4)

简单string.split不会歧视,因为它无法在任何先前的背景下看待它。

你需要re.split,正则表达式具有负面的后瞻断言,\n前面没有空格。

s = 'CA, the title \nCA, The title\nCA, the title\n'
re.split(r'(?<! )\n', s)
['CA, the title \nCA, The title', 'CA, the title', '']

答案 2 :(得分:3)

带有负面的背后。

>>> contents = 'CA, The title\nCA, the title \nCA, The title\n'
>>> re.split(r'(?<! )\n', contents)
['CA, The title', 'CA, the title \nCA, The title', '']

答案 3 :(得分:0)

你也可以使用积极的lookbehind。 \S匹配任何非空格字符。

>>> s = 'CA, the title \nCA, The title\nCA, the title\n'
>>> re.split(r'(?<=\S)\n', s)
['CA, the title \nCA, The title', 'CA, the title', '']