我希望使用正则表达式

时间:2019-06-12 05:55:48

标签: python regex

我尝试根据我的模式来选择中间单词。以下是我的代码:

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: ['田中区']

我不想参加[都道府県],所以我使用“?!”在我的第一个开始模式中是(?!... ?? [都道府県])。但是,当我运行程序时,它表明“都”也在其中,就像我在当前输出中所显示的一样。有人可以指导我吗?

1 个答案:

答案 0 :(得分:1)

您的正则表达式的问题在于它太允许了。

如果您在此处查看此可视化效果(我删除了所有与城市无关的硬编码城市名称):

enter image description here

您会看到很多“任何字符”重复x次,或者只是“ not市”和“ not町”重复x次。这些与您的字符串中的都道府県匹配。因此,这些是您不应禁止都道府県的地方:

enter image description here

相应的正则表达式为:

(?:余市|高市|[^都道府県市]{2,3}?)郡(?:玉村|大町|[^都道府県]{1,5}?)[町村]|(?:[^都道府県]{1,4}市)?[^都道府県町]{1,4}?区|[^都道府県]{1,7}?[市町村]

在将其放入代码中时,请记住添加硬编码的城市!