如何更具体地使用这个正则表达式?

2024-09-25 14:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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. 后跟(…字母数字…),所以。*
  3. 然后是一个结束符和逗号,然后是另一个集合或有一个新行

但我的RE一直和整条线匹配。有什么建议吗?你知道吗


Tags: 字符串re表达式字母数字建议pattern逗号
3条回答

你可以想出:

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。你知道吗

您可以使用正面展望:

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

此外,您还可以:

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

然后,您可以用back-reference 1获取5位字符串,用back-reference 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

import re

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

相关问题 更多 >