我需要两个正则表达式操作的帮助。
e.g。 '这太酷了(234)'=> “这太酷了”
答案 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)))