如何替换某个字母而不替换其他字母?

时间:2019-01-16 02:31:09

标签: python regex

如何在某个位置替换某个字母而不替换另一个相同的字母?例如:

text = `"I need help. I need 5.4 dollar."`

我尝试过:

a = re.compile('\D(\.)')
print(a.sub('\n',text))

但是,输出是

"I need hel\n I need 5.4 dolla\n"

如何获取

的输出
"I need help\n I need 5.4 dollar\n"

3 个答案:

答案 0 :(得分:2)

您可以使用lookback

>>> text = "I need help. I need 5.4 dollar."
>>> re.sub(r'(?<=\D)\.', '\n', text)
'I need help\n I need 5.4 dollar\n'

在这种情况下,(?<=\D)断言文字.前面的字符不是数字。

答案 1 :(得分:1)

编写有效的正则表达式始于具体确定您的需求。就您而言,您似乎想要:

“用换行符替换所有句点,除非句点是数字的一部分。”

为了更精确,定义一个句点是数字的一部分:它可能意味着直接在其后跟一个数字,以使其与5.4,但也与{{ 1 {}中的1}},但.4中的The average score of .4 was low.

“用换行符替换所有句点,除非句点后面紧跟数字。”

4.

您的示例She only counted a total of 4.所匹配的是:“匹配不是数字的单个字符,然后是文字import re text = '"I have .5 dollar. I need 5.4 dollar. But they only gave me 3."' expression = re.compile(r'\.(?!\d)') print(expression.sub('\n', text)) ”,这不是您要替换的。

新表达式\D(\.)与“匹配文字.,但仅当其后没有数字时”匹配。它使用了一种称为否定先行的方式,https://www.regular-expressions.info/lookaround.html

答案 2 :(得分:0)

对于此特定示例,您可以使用正则表达式元字符\ b来匹配单词的开头或结尾(单词边界)

import re

text = "I need help. I need 5.4 dollar."

a = re.compile('\b(\.)')
print(a.sub('\n',text))