Я попытался взять средние слова на основе своего шаблона. Ниже приведены мои коды:
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: ['田中区']
Я не хочу брать [都道府県], поэтому использую "?!" в моем первом начальном образце как (?!...??[都道府県]). Однако, когда я запускаю свою программу, она показывает, что "都" находится внутри, как я показываю в своем текущем выводе. Может ли кто-нибудь указать мне на это?
Я не знаю, почему они отвергают мое редактирование, чтобы включить это выше в мой пример. Пожалуйста, используйте это.
То, что вы пытаетесь сопоставить, похоже, является адресом. Можете ли вы объяснить словами, какой адрес и какую часть адреса вы хотите сопоставить, вместо того, чтобы просто показать свою попытку регулярного выражения?
из текста = "東京都田中区9-7−4" Я хочу сопоставить слова после "都" или "道" или "府" или "県" (эти слова могут появляться в тексте адреса), который из «田中区», оканчивающееся на «区». Поэтому мой вывод должен быть «田中区», а не «都田中区».
Проблема с вашим регулярным выражением заключается в том, что оно слишком позволяет.
Если вы посмотрите на эту визуализацию здесь (я удалил все жестко запрограммированные названия городов (市), потому что они не имеют значения):
вы можете увидеть множество «любых символов», повторяющихся x раз, или просто «не 市» и «не 町», повторяющихся x раз. Это то, что соответствует 都道府県 в вашей строке. Поэтому вот места, где вы должны запретить 都道府県:
Соответствующее регулярное выражение будет:
(?:余市|高市|[^都道府県市]{2,3}?)郡(?:玉村|大町|[^都道府県]{1,5}?)[町村]|(?:[^都道府県]{1,4}市)?[^都道府県町]{1,4}?区|[^都道府県]{1,7}?[市町村]
Не забудьте добавить жестко запрограммированные города, когда будете вставлять это в свой код!
Большое спасибо, сэр. Можете ли вы рассказать мне, как вы сделали иллюстрации, чтобы я тоже мог учиться? Пожалуйста
@Anonymous Есть много сайтов, которые это делают. Одним из примеров является regexper.com.
Спасибо, что поделились, и я отметил это как ответ. Большое спасибо
Кстати, вы знаете веб-сайт, который может генерировать для меня регулярное выражение, такое как то, которое они создали для графика. Будет очень признателен.
@Anonymous Вы имеете в виду веб-сайт, который, учитывая график, может сгенерировать для вас регулярное выражение? Я не думаю, что такое существует. Вам нужно написать регулярные выражения самостоятельно.
r = re.compile(u"(?!...??[都道府県])((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下松|岩国|田川|大村|宮古|富良野|別府|佐伯|黒部|小諸|塩尻|玉野|周南)市|(?:余市|高市|[^市]{2,3}?)郡(?:玉村|大町|.{1,5}?)[町村]|(?:.{1,4}市)?[^町]{1,4}?区|.{1,7}?[市町村])")