我有一个非常大的字符串(300 MB +),它有一些我需要清理的垃圾数据。我使用的是32位的Python 2.7。
我不想使用字符串操作replace
,因为用户使用的文件只会随着时间的推移而增长,所以我尝试使用re.sub
替换值{ [linender]
使用新的字符字符\n
或os.linesep
。
看起来很简单,所以我的模式是:
re.sub('\[lineender]\b, os.linesep, text_value)
这导致整个字符串中只替换了一个值,这是错误的。
示例数据:
s = """A|B|3[lineender]E|F|2M[lineender]"""
有关如何修改我的正则表达式以使其正常工作的任何想法? 我基本上需要用一个换行符替换括号字。
答案 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)