Я хочу взять средний образец предложения в китайском иероглифе, используя регулярное выражение - PullRequest
2 голосов
/ 12 июня 2019

Я пытался взять средние слова на основе моего паттерна. Ниже приведены мои коды:

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

Я не хочу брать [都 道 府 県], поэтому я использую "?!" в моем первом начальном шаблоне как (?! ... ?? [都 道 府 県]). Тем не менее, когда я запускаю свою программу, она показывает, что «inside» находится внутри так же, как я показываю на моем текущем выводе. Может ли кто-нибудь, пожалуйста, направить меня на это?

1 Ответ

1 голос
/ 12 июня 2019

Проблема с вашим регулярным выражением в том, что он слишком разрешает.

Если вы посмотрите на эту визуализацию здесь (я удалил все жестко закодированные названия городов (because), потому что они не имеют значения):

enter image description here

Вы можете увидеть множество «любых символов», повторенных х раз, или просто «не 市» и «не 町», повторенных х раз.Это то, что соответствует 都 道 府 県 в вашей строке.Следовательно, это те места, где вы должны запретить 101 道 府 県:

enter image description here

Соответствующее регулярное выражение будет:

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

Помнитедобавить жестко закодированные города, когда вы добавите это в свой код!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...