регулярное выражение Python, чтобы получить весь текст до (и получить текст в скобках - PullRequest
2 голосов
/ 07 августа 2010

Мне нужна помощь с двумя операциями регулярного выражения.

  1. получить весь текст до открытой скобки.

например, 'это так круто (234)' => 'это так круто "

получить текст в скобках, поэтому число «234»

Ответы [ 4 ]

6 голосов
/ 07 августа 2010

До парена: regex = re.compile("(.*?)\s*\(")

Внутри первого набора паренов: regex = re.compile(".*?\((.*?)\)")

Редактировать: Версия для одного регулярного выражения: regex = re.compile("(.*?)\s*\((.*?)\)")

Пример вывода:

>>> import re
>>> r1 = re.compile("(.*?)\s*\(")
>>> r2 = re.compile(".*?\((.*?)\)")
>>> text = "this is so cool (234)"
>>> m1 = r1.match(text)
>>> m1.group(1)
'this is so cool'
>>> m2 = r2.match(text)
>>> m2.group(1)
'234'
>>> r3 = re.compile("(.*?)\s*\((.*?)\)")
>>> m3 = r3.match(text)
>>> m3.group(1)
'this is so cool'
>>> m3.group(2)
'234'
>>> 

Обратите внимание, конечно, что это не будет работать правильно с несколькими наборами скобок, так как он ожидает только один блок текста в скобках (в соответствии с вашим примером). Язык соответствия открывающих / закрывающих паренсов произвольного повторения не является регулярным.

1 голос
/ 07 августа 2010

Похоже, вы могли бы просто сделать это:

re.findall('[^()]+', mystring)

Разделение тоже будет работать:

re.split('[()]', mystring)

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

0 голосов
/ 07 августа 2010

Вот моя версия библиотеки функций без регулярных выражений.

def between(left,right,s):
    before,_,a = s.partition(left)
    a,_,after = a.partition(right)
    return before,a,after

s="this is so cool (234)"
print('\n'.join(between('(',')',s)))
0 голосов
/ 07 августа 2010

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

>>> s="this is so cool (234)"
>>> s.split("(")[0]
'this is so cool '
>>> s="this is so cool (234) test (123)"
>>> for i in s.split(")"):
...  if "(" in i:
...     print i.split("(")[-1]
...
234
123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...