我有这样的事情:
Othername California (2000) (T) (S) (ok) {state (#2.1)}
Run Code Online (Sandbox Code Playgroud)
是否有正则表达式代码获取:
Othername California ok 2.1
Run Code Online (Sandbox Code Playgroud)
即我想将数字保持在圆括号内,而这些数字又在{}内,并保持文本"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)}
Run Code Online (Sandbox Code Playgroud)
(.+)\s+\(\d+\).+?(?:\(([^)]{2,})\)\s+(?={))?\{.+\(#(\d+\.\d+)\)\}
Run Code Online (Sandbox Code Playgroud)

Name1 Name2 Name3 (2000) {Education (#3.2)}
Name1 Name2 Name3 (2000) (ok) {edu (#1.1)}
Name1 Name2 (2002) {edu (#1.1)}
Name1 Name2 Name3 (2000) (V) {variation (#4.12)}
Othername California (2000) (T) (S) (ok) {state (#2.1)}
>>> regex = re.compile("(.+)\s+\(\d+\).+?(?:\(([^)]{2,})\)\s+(?={))?\{.+\(#(\d+\.\d+)\)\}")
>>> r = regex.search(string)
>>> r
<_sre.SRE_Match object at 0x54e2105f36c16a48>
>>> regex.match(string)
<_sre.SRE_Match object at 0x54e2105f36c169e8>
# Run findall
>>> regex.findall(string)
[
(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')
]