Regex для захвата только 1-го вхождения в скобках - PullRequest
1 голос
/ 26 сентября 2019

У меня есть данные, которые выглядят так:

string = 'composition (irreg.): 13/16 × 2 3/4" (2 × 7 cm); page: 8 3/8 × 6 7/8" (21.3 × 17.4 cm)'

Я хочу написать регулярное выражение, которое фиксирует первое вхождение строки с круглыми скобками, содержащими cm.Итак, в приведенном выше примере я хочу регулярное выражение, которое захватывает (2 × 7 cm).

Пока у меня есть это регулярное выражение, которое не совсем работает:

>>> pattern = re.compile(r'\(.*?.*cm\).*?')
>>> result = pattern.search(string)
>>> match = result.group(0)
'(irreg.): 13/16 × 2 3/4" (2 × 7 cm); page: 8 3/8 × 6 7/8" (21.3 × 17.4 cm)'

Какое регулярное выражение я могу использоватьТОЛЬКО для совпадения (2 × 7 cm)?

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Измените .* на [()*], чтобы оно не совпадало с несколькими скобками.

Вам также не нужно .*? после скобок, которые вы хотите сопоставить.Так как он не жадный, он ничему не соответствует.

pattern = re.compile(r'\([^()]*cm\)')
0 голосов
/ 26 сентября 2019

Пока секция, которую вы хотите сопоставить, всегда имеет формат (n x n cm), вы можете использовать:

'\(\d*\.?\d+ × \d*\.?\d+ cm\)'

\d*\.?\d+ позаботится о соответствии десятичного числа.Указав его следующим образом, вы не будете случайно брать другие скобки в строке (например, скобку перед irreg).

Вот оно в действии: https://regex101.com/r/tfVrsU/1

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