Regex删除标点符号,但不删除数字之间的错误结果



我正在为SpaCy预处理文本,并尝试删除标点符号,数字之间除外。然而,在某些情况下,当标点符号与数字连接时,它不会被删除。你能建议一下如何处理这个边缘案件吗?

一个例子:

import re
text = "Fast-charge $ EV ! battery maker StoreDot pulls in $80.7M led led by Vietnam’s VinFast"
preprocessed = re.sub(r'(?<!d)[%$!.,,;:’“”—-](?!d)',' ', text)
print(preprocessed)
# Fast charge   EV   battery maker StoreDot pulls in $80.7M led by Vietnam s VinFast

预期结果:

# Fast charge   EV   battery maker StoreDot pulls in 80.7M led by Vietnam s VinFast

负环视在两侧都应该为真,这样就不会与$80中的$匹配

您可以匹配字符类的一个字符,断言在左侧或右侧使用交替|没有数字。

(?<!d)[%$!.,;:’“”—-]|[%$!.,;:’“”—-](?!d)

查看regex演示

票据

  • 示例字符串中有led led,预期结果中只有一个led,但我认为这是拼写错误,因为字符类无法匹配led

  • 字符类中还有一个,的双条目。

  • 不确定是否要保留它们,但在替换中使用空格可能会留下双倍间距的间隙,正如您在预期结果中看到的那样。如果要删除它们,可以使用strip()来删除前导空格和尾随空格,并使用sub和r"[^Sn]{2,}"来匹配2个或多个没有换行符的空格,并用单个空格替换它们

最新更新