有没有办法根据标准.replace()某些字符串片段?

时间:2017-07-01 16:30:36

标签: python string replace

我从.txt文件导入,其中包含我从PDF复制粘贴的David Foster Wallace。有些单词在页面上运行,因此以

的形式出现
"interr- upted"

我打算用以下东西来消毒:

with open(text, "r", 0) as bookFile:
    bookString = bookFile.read().replace("- ", "")

除了......男人在写作中也使用了一些奇怪的结构。比如:

"R - - d©"

为品牌名称喷雾Raid©。我显然留下了“R d©”,但有没有办法让它成为“ - ”的.replace()实例,而不是“ - ”的实例?或者我是否需要将所有内容都转换为列表并对所有内容进行操作?感谢。

3 个答案:

答案 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