我试着根据我的模式来取中间词。以下是我的代码:
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: ['田中区']
我不想拿[都道府県]所以我用“?!”在我的第一个开始模式中是 (?!...??[都道府県])。然而,当我运行我的程序时,它显示“都”也在里面,就像我在当前输出中显示的那样。有人可以指导我吗?
请您参考如下方法:
你的正则表达式的问题是它太允许了。
如果您在这里查看此可视化(我删除了所有硬编码的城市 (市) 名称,因为它们不相关):
可以看到很多“any character”重复了x次,或者只是“not 市”和“not 町”重复了x次。这些是匹配字符串中的都道府県的内容。因此,这些是你应该禁止都道府県的地方:
相应的正则表达式为:
(?:余市|高市|[^都道府県市]{2,3}?)郡(?:玉村|大町|[^都道府県]{1,5}?)[町村]|(?:[^都道府県]{1,4}市)?[^都道府県町]{1,4}?区|[^都道府県]{1,7}?[市町村]
请记住在将其放入代码中时添加硬编码城市!
