如何在某个位置替换某个字母而不替换另一个相同的字母?例如:
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"
答案 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))