正则表达式在python中嵌套括号
我有这样的事情:
Othername California (2000) (T) (S) (ok) {state (#2.1)}
是否有正则表达式代码可获取:
Othername California ok 2.1
也就是说,我想将数字保持在圆括号内,将其依次放在{}内,并将文本“ ok”保持在()内。我特别需要打印出“
ok”字符串(如果包含在我的行中),但是我想去除括号内的其他文本,例如(V),(S)或(2002)。
我知道,正则表达式可能不是解决此类问题的最有效方法。
任何帮助,将不胜感激。
编辑:
该字符串可能会有所不同,因为如果某些信息不可用,则该行中将不包含该字符串。文本本身也是可变的(例如,我没有每一行都有“状态”)。因此,可以有例如:
Name1 Name2 Name3 (2000) (ok) {edu (#1.1)}
Name1 Name2 (2002) {edu (#1.1)}
Name1 Name2 Name3 (2000) (V) {variation (#4.12)}
-
正则表达式
(.+)\s+\(\d+\).+?(?:\(([^)]{2,})\)\s+(?={))?\{.+\(#(\d+\.\d+)\)\}
用于测试的文字
Name1 Name2 Name3(2000){教育(#3.2)} Name1 Name2 Name3(2000)(ok){edu(#1.1)} Name1 Name2(2002){edu(#1.1)} Name1 Name2 Name3(2000)(V){variation(#4.12)} 加州(2000)(T)(S)(ok){州(#2.1)}
测试
>>> regex = re.compile(“(。+)\ s + \(\ d + \)。+?(?:\(([[^)] {2,})\)\ s +(?= {)) ?\ {。+ \(#(\ d + \。\ d +)\)\}“}) >>> r = regex.search(字符串) >>> r <_sre.SRE_Match对象位于0x54e2105f36c16a48> >>> regex.match(字符串) <_sre.SRE_Match对象位于0x54e2105f36c169e8> #运行findall >>> regex.findall(字符串) [ (u'Name1 Name2 Name3',u'',u'3.2'), (u'Name1 Name2 Name3',u'ok',u'1.1'), (u'Name1 Name2',u'',u'1.1'), (u'Name1 Name2 Name3',u'',u'4.12'), (u'Othername California',u'ok',u'2.1') ]