Используя регулярное выражение Python, как я могу получить одну и ту же строку в разных строках

У меня есть 2 строки:

  • 99.95 was(138)
  • 160.56

Мне нужно создать регулярное выражение, которое позволяет мне получить ] эти числа:

  • 138
  • 160.56

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

У меня есть это: [(]?\d+[)]?$, но в первом случае я также выбираю скобки.

2
задан 21.07.2016, 22:57
2 ответа

SegГєn interpretГ© твоего вопроса:

  1. , Если есть один nГєmero между parГ©ntesis, получать этот nГєmero.
  2. Иначе, получать первого nГєmero в тексте

Regex

(?:^.*?\()?(\d+(?:\.\d+)?)

DescripciГіn

  • Primero пробует тратить все символы с начала текста до первого parГ©ntesis ^.*?\(
    • Это внутри группы ( нечетное число - capturing group ), чтобы делать опциональными (?:^.*?\()?, и что функционировал в 2 случаях
  • , Потом ищи один nГєmero, которые он может считать десятичными \d+(?:\.\d+)?
    • И это внутри группы ( capturing group ) между parГ©ntesis (\d+(?:\.\d+)?), чтобы это хранить и мочь снабжать ссылками это с .group(1)

CГіdigo

import re

p = re.compile(r'(?:^.*?\()?(\d+(?:\.\d+)?)')

str1 = '99.95 was(138.5)'
str2 = '160.56'

res1 = p.search(str1)
print(res1.group(1))

res2 = p.search(str2)
print(res2.group(1))

Resultado

138.5
160.56
3
ответ дан 24.11.2019, 13:48
  • 1
    Совершенный! Функционируй, смотри этот, который tambi и # 233; n функционируй, что я смог делать (\d+.\d+)(?!.*\d). –  Elvis Saavedra 01.08.2016, 23:30
  • 2
    @ElvisSaavedra твой пример не функционировать и # 237; в. Probalo против 4A8 или против (124)__ 666 и ты увидишь, что est и # 225; плохо. Если тебе интересно изучать относительно регулярных выражений, есть много руководителей в Вебе. Обрати внимание в es.stackoverflow.com/tags/regex/info , что есть какие-то списки, и если есть что-то, что ты не понимал бы, м и # 225; s, который желанный, чтобы делать другую, ты спрашиваешь... Я радуюсь, что он помог тебе –  Mariano 02.08.2016, 01:18
  • 3
    Привет, у тебя есть raz и # 243; n, оно не функционирует для примеров, которые ты поместил, но для которого я нуждался в том, если я функционировал хорошо. В любом случае спасибо за aclaraci и # 243; n. –  Elvis Saavedra 13.09.2016, 00:58

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

Самый простой способ это делать - используя один or в regex |:

(\((\d{3})\))|[\d]{3}\.[\d]{2}

Выражение идет в campturar контент скобки (включенный скобки) или блок чисел 3 цифр и 2 десятичные. Будешь функционировать, всякий раз когда у тебя были те же strings.

Пытаясь с python в консоли:

>>> r = '(\((\d{3})\))|[\d]{3}\.[\d]{2}'
>>> t1 = '99.95 was(138)'
>>> t2 = '160.56'
>>> p = re.compile(r)
>>> p.search(t1).group().replace('(', '').replace(')', '')
'138'
>>> p.search(t2).group().replace('(', '').replace(')', '')
'160.56'

Ты можешь тестировать выражения здесь.

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

1
ответ дан 24.11.2019, 13:48
  • 1
    Хорошие, спасибо за твой ответ, твой пример, если в переменную t2 я помещаю ему один n и # 250; морской окунь с десятичным это не выбирает. Стоимость может иметь десятичные, как не имение их... –  Elvis Saavedra 21.07.2016, 21:16
  • 2
    Тема не с десятичными, но он понимает, что их всегда 3 d и # 237; gitos в целой части и 2 десятичных, которые pod и # 237; чтобы неверно истолковывать вопроса –  Mariano 02.08.2016, 01:22

Теги

Похожие вопросы