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



我正在从一个包含一些David Foster Wallace的.txt文件中导入,这是我从PDF复制粘贴的。有些单词从页面上跑了出来,所以以

"interr- upted"

我打算使用以下方法对其进行消毒:

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

除了。。。这个人在他的写作中也使用了一些奇怪的结构。像这样的事情:

"R - - d©"

为品牌名称虫子喷雾突袭©。我显然只剩下"R d©",但是有没有办法让它成为"-"的.replace((实例,而不是" - "的实例?还是我需要将所有内容转换为列表并以这种方式对所有内容进行操作?谢谢。

您可以使用带有否定后看断言的正则表达式来检查前一个字符,并使用re.sub将匹配项替换为空字符串。

'(?<! )- '是一个正则表达式,匹配'- '的所有实例,前面没有单个空格字符(有关语法,请参阅本节(。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©'

您可以使用后瞻和前瞻来确保仅替换需要替换的匹配项:

>>> 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©'

后者不受影响。

这是你需要的吗?

In [23]: import re
In [24]: re.sub(r'- ', '', '"R - - d"')
Out[24]: '"R d"'

此链接可以为您提供帮助。

呵呵

最新更新