为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式在python中嵌套括号

正则表达式在python中嵌套括号

慕标5832272 2021-03-29 17:19:30
我有这样的事情: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)}
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

尽管我在评论中说了什么。我找到了一种解决方法:


(?(?=\([^()\w]*[\w.]+[^()\w]*\))\([^()\w]*([\w.]+)[^()\w]*\)|.)(?=[^{]*\})|(?<!\()(\b\w+\b)(?!\()|ok

解释:


(?                                  # If

(?=\([^()\w]*[\w.]+[^()\w]*\))      # There is (anything except [()\w] zero or more times, followed by [\w.] one or more times, followed by anything except [()\w] zero or more times)

\([^()\w]*([\w.]+)[^()\w]*\)        # Then match it, and put [\w.] in a group

|                                   # else

.                                   # advance with one character

)                                   # End if

(?=[^{]*\})                         # Look ahead if there is anything except { zero or more times followed by }


|                                   # Or

(?<!\()(\b\w+\b)(?!\()              # Match a word not enclosed between parenthesis

|                                   # Or

ok                                  # Match ok


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信