регулярное выражение, чтобы соответствовать буквально символы сокращения - PullRequest
1 голос
/ 15 апреля 2020

Я новичок в regex, и мне нужна помощь. Итак, у меня есть строка ниже, и я хочу, чтобы мое регулярное выражение совпадало с первым символом аббревиатуры буквально + любой символ [az] неограниченное количество раз, но только для первого символа. Что касается остальных персонажей, я бы хотел сопоставить их такими, какие они есть. Буду очень признателен за любую помощь в том, что нужно изменить в моей строке регулярных выражений.

import re
s = 'nUSA stands for northern USA'
x = (f'({"nUSA"}).+?({" ".join( t[0] + "[a-z]" + t[1:] for t in "nUSA")})(?: )')
print(x)
out: (nUSA).+?(n[a-z]+ U[a-z]+ S[a-z]+ A[a-z]+)(?: )

То, чего я хочу достичь с помощью своей строки регулярных выражений, - это что-то вроде приведенного ниже шаблона, чтобы он мог соответствовать для север США.

(nUSA).+?(n[a-z]+ U + S + A)(?: )

вместо того, который я получаю

(nUSA).+?(n[a-z]+ U[a-z]+ S[a-z]+ A[a-z]+)(?: )

Я бы хотел, чтобы он работал для любого произвольного текста, а не только для указанного c. Я не уверен, правильно ли я выразил свою проблему.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете использовать

import re
s = 'nUSA stands for northern USA'
key='nUSA'
x = rf'\b({key})\b.+?\b({key[0]}[a-z]*\s*{key[1:]})(?!\S)'
# => print(x) => \b(nUSA)\b.+?\b(n[a-z]*\s*USA)(?!\S)
# Or, if the key can contain special chars at the end:
# x = rf'\b({re.escape(key)})(?!\w).+?(?<!\w)({re.escape(key[0])}[a-z]*\s*{re.escape(key[1:])})(?!\S)'
print(re.findall(x, s))
# => [('nUSA', 'northern USA')]

См. Python демо . Полученное регулярное выражение будет выглядеть как \b(nUSA)\b.+?\b(n[a-z]*\s*USA)(?!\S), см. его демо . Подробности:

  • \b - граница слова
  • (nUSA) - Группа 1, фиксирующая ключевое слово
  • \b / (?!\w) - граница слова ( граница слова справа)
  • .+? - любые 1+ символов, кроме символов перевода строки, как можно меньше
  • \b - граница слова
  • (n[a-z]*\s*USA) - Группа 2: n (первый символ), затем любые 0+ строчные буквы ASCII, 0+ пробелы и остальная часть строки key.
  • (?!\S) - правая граница пробела (вы может рассмотреть возможность использования (?!\w) здесь).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...