python正则表达式获取所有文本直到a(,并在括号内获取文本

时间:2010-08-07 04:01:03

标签: python regex

我需要两个正则表达式操作的帮助。

  1. 获取所有文字,直至打开括号。
  2. e.g。 '这太酷了(234)'=> “这太酷了”

    1. 在括号内输入文字,所以数字为'234'

4 个答案:

答案 0 :(得分:6)

直到paren:regex = re.compile("(.*?)\s*\(")

在第一组parens中: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'
>>> 

当然注意,这对于多组parens不起作用,因为它只期望一个带括号的文本块(根据你的例子)。任意复发的开/关匹配的语言不规则。

答案 1 :(得分:1)

听起来像你可以做到这一点:

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

分裂也会起作用:

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

无论哪种方式,第一个括号前的文本将是结果数组中的第一个项目,第一组括号中的文本将是第二个项目。

答案 2 :(得分:0)

无需正则表达。

>>> 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

答案 3 :(得分:0)

这是我自己的库函数版本,没有正则表达式。

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)))