如何在不替换其他字母的情况下替换某个字母?

2024-06-26 13:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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"

Tags: textre字母helpneedprintcompiledollar
3条回答

对于这个特定的示例,可以使用regex元字符\b来匹配单词的开头或结尾(单词边界)

import re

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

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

编写有效的正则表达式首先要明确地表达您真正需要的东西。在您的情况下,看起来您希望:

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

更准确的说,定义一个周期是一个数的一部分意味着什么:它可能意味着它后面紧跟着一个数,所以它匹配5.4,但也匹配The average score of .4 was low.中的.4,而不是She only counted a total of 4.中的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(\.)匹配的是:“匹配一个不是数字的字符,后跟一个文字.”,这不是你想要替换的。你知道吗

新的表达式\.(?!\d)匹配“匹配一个文字.,但只有在它后面没有数字时才匹配。”它使用了一种称为“负向前看”的方法,这里有https://www.regular-expressions.info/lookaround.html

您可以使用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)断言文字.前面的字符不是数字。你知道吗

相关问题 更多 >