我从.txt文件导入,其中包含我从PDF复制粘贴的David Foster Wallace。有些单词在页面上运行,因此以
的形式出现"interr- upted"
我打算用以下东西来消毒:
with open(text, "r", 0) as bookFile:
bookString = bookFile.read().replace("- ", "")
除了......男人在写作中也使用了一些奇怪的结构。比如:
"R - - d©"
为品牌名称喷雾Raid©。我显然留下了“R d©”,但有没有办法让它成为“ - ”的.replace()实例,而不是“ - ”的实例?或者我是否需要将所有内容都转换为列表并对所有内容进行操作?感谢。
答案 0 :(得分:3)
您可以使用带有负向lookbehind断言的正则表达式来检查前一个字符,使用re.sub
来替换匹配的空字符串。
'(?<! )- '
是一个正则表达式,匹配所有'- '
,不的实例,前面都有一个空格字符(请参阅this部分了解语法) 。 re.sub('(?<! )- ', '', input_string)
会将'(?<! )- '
中input_string
模式的所有匹配项替换为''
(空字符串)并返回结果。
示例:
In [1]: import re
In [2]: re.sub('(?<! )- ', '', 'interr- upted')
Out[2]: 'interrupted'
In [3]: re.sub('(?<! )- ', '', 'R - - d©')
Out[3]: 'R - - d©'
答案 1 :(得分:2)
您可以使用lookbehinds和lookaheads来确保仅替换需要替换的事件:
>>> import re
>>> regex_pattern = '(?<=[a-z])(- )(?=[a-z])'
>>> re.sub(regex_pattern, '', "interr- upted", re.I)
'interrupted'
和
>>> re.sub(regex_pattern, '', "R - - d©")
'R - - d©'
后者不受影响。
答案 2 :(得分:-2)
这就是你需要的吗?
In [23]: import re
In [24]: re.sub(r'- ', '', '"R - - d"')
Out[24]: '"R d"'
This链接可以帮助您。
HTH