Regex: сопоставление целых чисел внутри скобок - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь снять заключенные в скобки концы строк, такие как version = 10.9.8[35]. Я пытаюсь заменить целое число в скобках (так что все [35], включая скобки) пустой строкой, используя регулярное выражение [\[+0-9*\]+], но это также совпадает с числами, не заключенными в скобки. Я не правильно использую квантификатор +?

Ответы [ 3 ]

1 голос
/ 17 января 2020

Более простое решение для регулярных выражений:

import re
pattern = re.compile(r'\[\d+\]$')
s = '10.9.8[35]'
r = pattern.sub('', s)
print(r) # 10.9.8

Шаблон соответствует квадратным скобкам в конце строки с одним или несколькими числами внутри. Затем подпрограмма заменяет квадратные скобки и число пустой строкой.

Если вы хотите использовать число в квадратных скобках, просто измените выражение sub, например:

import re
pattern = re.compile(r'\[(\d+)\]$')
s = '10.9.8[35]'
r = pattern.sub(r'.\1', s)
print(r) # 10.9.8.35

В качестве альтернативы, как сказано в другом ответе, вы можете просто найти его и соединить, чтобы избавиться от него.

1 голос
/ 19 января 2020

Можно сопоставить формат числа, а затем сопоставить одну или несколько цифр в квадратных скобках.

При замене с использованием первой группы захвата r'\1'

\b([0-9]+(?:\.[0-9]+)+)\[[0-9]+\]
  • \b Граница слова
  • ( Группа захвата 1
    • [0-9]+ Совпадение 1+ цифр
    • (?:\.[0-9]+)+ Совпадение . и 1+ цифр и повторите это 1 или более раз
  • ) Закрыть группу
  • \[[0-9]+\] Совпадение 1+ цифр в квадратных скобках

Regex demo

Например

import re

regex = r"\b([0-9]+(?:\.[0-9]+)+)\[[0-9]+\]"
test_str = "version = 10.9.8[35]"
result = re.sub(regex, r'\1', test_str)
print (result)

Выход

version = 10.9.8
0 голосов
/ 17 января 2020

Нет необходимости в регулярном выражении

s =  '10.9.8[35]'
t = s[:s.rfind("[")]
print(t)

Но если вы настаиваете; -)

import re
s =  '10.9.8[35]'
t = re.sub(r"^(.*?)[[]\d+[]]$", r"\1", s)
print(t)

Распределение регулярного выражения:

  • ^ - начинается с
  • () - группа захвата 1, которую вы хотите сохранить
  • .*? - любое количество символов (без жадности)
  • [[] - открытие [
  • \d+ 1+ di git
  • []] - закрытие]
  • $ - заканчивается
  • \1 - захват группа 1 - используется в части замены регулярного выражения замены. Бит, который вы хотите сохранить.

Вывод в обоих случаях:

10.9.8

Используйте regex101.com , чтобы узнать больше. Если вы нажмете на любой из примеров регулярных выражений в правом нижнем углу веб-сайта, он даст вам больше информации. Вы также можете использовать его для генерации кода регулярного выражения на разных языках. (не подходит для Java, хотя!).

Существует также большая серия Python видео с регулярным выражением на Youtube от PyMoondra .

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