【发布时间】:2021-12-27 10:03:04
【问题描述】:
我有一个包含非英语/英语单词的字符串列表。我只想过滤掉英文单词。
例子:
phrases = [
"S/O अशोक कुमार, ब्लॉक न.-4डी, S/O Ashok Kumar, Block no.-4D.",
"स्ट्रीट-15, विभाग 5. सिविक सेंटर Street-15, sector -5, Civic Centre",
"भिलाई, दुर्ग, भिलाई, छत्तीसगढ़, Bhilai, Durg. Bhilai, Chhattisgarh,",
]
到目前为止我的代码:
import re
regex = re.compile("[^a-zA-Z0-9!@#$&()\\-`.+,/\"]+")
for i in phrases:
print(regex.sub(' ', i))
我的输出:
["S/O , .-4 , S/O Ashok Kumar, Block no.-4D.",
"-15, 5. Street-15, sector -5, Civic Centre",
", , , , Bhilai, Durg. Bhilai, Chhattisgarh",]
我的愿望输出
["S/O Ashok Kumar, Block no.-4D.",
"Street-15, sector -5, Civic Centre",
"Bhilai, Durg. Bhilai, Chhattisgarh,"]
【问题讨论】:
-
看来您的正则表达式中有一个未转义的
.,它将匹配任何字符。如果要匹配句点,则需要对其进行转义,即\.。您还应该查看正则表达式的特殊字符,例如\w和\d,这将使您的表达式更短。看来您希望匹配的字符串以英文字母开头,因此您可以在进入字符串其余部分的匹配之前强加该匹配。例如\w[\w\d]+ -
@bicarlsen 组中的点不需要转义,问题在别处
-
@bicarlsen,嗨,你能告诉我应该是什么表达方式吗??
-
谢谢@mozway,我不知道。
-
求求你,但不要将正则表达式用于严肃的应用程序(例如 Adhaar Card、Banks),因为我看到了可怕的 ID 错误打印不是一种,而是 20 多种印度语言。更好地投资于特殊的 Unicode 解析器。