擅长:python、mysql、java
<p>编写有效的正则表达式首先要明确地表达您真正需要的东西。在您的情况下,看起来您希望:</p>
<p>用换行符替换所有句点,除非句点是数字的一部分</p>
<p>更准确的说,定义一个周期是一个数的一部分意味着什么:它可能意味着它后面紧跟着一个数,所以它匹配<code>5.4</code>,但也匹配<code>The average score of .4 was low.</code>中的<code>.4</code>,而不是<code>She only counted a total of 4.</code>中的<code>4.</code></p>
<p>用换行符替换所有句点,除非句点后面紧跟着一个数字</p>
<pre><code>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))
</code></pre>
<p>你的例子<code>\D(\.)</code>匹配的是:“匹配一个不是数字的字符,后跟一个文字<code>.</code>”,这不是你想要替换的。你知道吗</p>
<p>新的表达式<code>\.(?!\d)</code>匹配“匹配一个文字<code>.</code>,但只有在它后面没有数字时才匹配。”它使用了一种称为“负向前看”的方法,这里有<a href="https://www.regular-expressions.info/lookaround.html" rel="nofollow noreferrer">https://www.regular-expressions.info/lookaround.html</a></p>