我试着根据我的模式选择中间的单词。下面是我的代码:
text = "東京都田中区9-7−4"
import re
#Sorry due to the edit problem and stackoverflow doesnt allow me to include long sentences here, please check my comment below for the compile function of re.
city = re.findall(r,text)
print("getCity: {}".format(city))
我当前的输出:
getCity: ['都田中区']
我的预期输出:
getCity: ['田中区']
我不想使用都道府県,所以我使用"?!“在我的第一个开始模式中(?!...??都道府県)。但是,当我运行我的程序时,它显示"都“也在里面,就像我在当前输出中显示的一样。有人能在这方面给我指点一下吗?
发布于 2019-06-12 14:17:13
您的正则表达式的问题是它太允许了。
如果你看一下这里的可视化(我删除了所有硬编码的城市(市)名称,因为它们是不相关的):
你可以看到很多"any character“重复x次,或者只是"not市”和"not町“重复了x次。这些是与字符串中的都道府県相匹配的内容。因此,以下是您应该禁止都道府県的地方:
相应的正则表达式为:
(?:余市|高市|[^都道府県市]{2,3}?)郡(?:玉村|大町|[^都道府県]{1,5}?)[町村]|(?:[^都道府県]{1,4}市)?[^都道府県町]{1,4}?区|[^都道府県]{1,7}?[市町村]
记住在你的代码中添加硬编码的城市!
https://stackoverflow.com/questions/56555489
复制相似问题