由于带括号

时间:2016-08-31 09:55:09

标签: python regex python-2.7

我有一个非常大的字符串(300 MB +),它有一些我需要清理的垃圾数据。我使用的是32位的Python 2.7。

我不想使用字符串操作replace,因为用户使用的文件只会随着时间的推移而增长,所以我尝试使用re.sub替换值{ [linender]使用新的字符字符\nos.linesep

看起来很简单,所以我的模式是:

re.sub('\[lineender]\b, os.linesep, text_value)

这导致整个字符串中只替换了一个值,这是错误的。

示例数据:

s = """A|B|3[lineender]E|F|2M[lineender]"""

有关如何修改我的正则表达式以使其正常工作的任何想法? 我基本上需要用一个换行符替换括号字。

2 个答案:

答案 0 :(得分:2)

请注意,非原始字符串文字中的\b是退格。如果您使用单词边界r'\b',则在]之后将需要单词char(字母,数字或下划线)。在您的情况下,我完全删除\b

re.sub(r'\[lineender]', os.linesep, text_value)

如果您想确保]后没有字词,则可以将\b替换为\B,但请确保使用r前缀使你的字符串文字原始。

请参阅Python demo

import re, os
text_value = """A|B|3[lineender]E|F|2M[lineender]"""
print('"{}"'.format(re.sub(r'\[lineender]', os.linesep, text_value)))

答案 1 :(得分:1)

您需要将模式作为原始字符串传递:

re.sub(r'\[lineender\]\b', os.linesep, text_value)

或者,您必须使用\\(双反斜杠):

re.sub('\\[lineender\\]\\b', os.linesep, text_value)
相关问题