如何使用此正则表达式更具体?

时间:2016-08-11 19:02:32

标签: python regex

我使用python并尝试将以下字符串分成两个字符串:

'"99233 (I21.4,I50.23), 93010 (I21.4,I50.23)"'

stringA = "99233 (I21.4,I50.23),"
stringB = "93010 (I21.4,I50.23)"

我在python中使用以下表达式:

pattern = re.compile('\d{5}.*[),|"|\n]')

所以我做了以下事情:

  1. 总有5个数字,所以\ d {5}
  2. 接着是(... alphanumerics ...),所以。*
  3. 然后有一个末端的parens和逗号,然后是另一个集合或者有一个新行
  4. 但我的RE一直与整条线相匹配。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

你可以提出:

import re

string = '99233 (I21.4,I50.23), 93010 (I21.4,I50.23)'
parts = re.split(r'(?<=\)),\ ', string)
print(parts)
# ['99233 (I21.4,I50.23)', '93010 (I21.4,I50.23)']

这使用正面的后视并在空间上分裂 请参阅a demo on ideone.com

答案 1 :(得分:1)

import re

data = '"99233 (I21.4,I50.23), 93010 (I21.4,I50.23)"'
print re.findall(r'\d{5}.*\(.*?\)', data)

答案 2 :(得分:0)

你可以使用积极的前瞻:

\d{5}.*(?=\))

另外你可以做到这一点:

(\d{5})(.*(?=\())(.*)(?=\))

然后你可以抓住带有反向引用1的5位数字符串,带有反向引用3的内部字符串

或者你可以更进一步:

(\d{5})(.*(?=\())(\((\s{1,}\b|\b))(.*?(?=(\s{1,},|,)))(\s{1,},|,)(\s{1,}\b|\b)(.+)(?=\s{1,}\)|\))

然后你可以得到以下结果:

5位数字符串:反向引用1

左手内部值:反向引用5

右手内部值:反向引用9

观察

编辑:发现了一个错误,从而删除了链接。这是新的:

Regex with test strings