Python 2.7中的正则表达式匹配问题

时间:2016-08-13 02:23:04

标签: python regex python-2.7

使用Python 2.7,想要使用正则表达式来查找给定字符串的Hello部分。规则是,Hello可能在模式中以{(1N){(2N)(直到10N)或它们的组合{(1N,2N,3N,4N)开头,并以{{结尾1}}。

除了匹配}部分之外,我还想知道Hello是否匹配,或1N匹配或2N匹配,还是10N或{ {1}}匹配。

任何解决方案都表示赞赏。

1N

在第一个示例中,我想知道2N Some content {(1N,2N,3N,4N) Hello } Some content Some content {(1N) Python } Some content Some content {(2N) Regex } Some content 1N2N匹配,匹配的字符串为3N;

在第二个例子中,我想知道4N个匹配,匹配的字符串是Hello; 在第三个示例中,我想知道1N匹配,匹配字符串为Python;

的问候, 林

2 个答案:

答案 0 :(得分:2)

正则表达式无法真正计算(这就是为什么你说你试图写相同模式的10倍),而是你可以匹配序列然后拆分为count:

In [100]: match = re.compile(r"\{\s?\(\s?((\d+N,?)+)\)\s?(.*)\s?\}").search("Some content  { (1N,2N,3N,4N) Hello } Some content")

In [101]: items, _, text = match.groups()

In [102]: splitted = items.split(',')

In [103]: print(splitted)
['1N', '2N', '3N', '4N']

In [104]: print(text)
Hello 

注意:所有\s?都可用于处理可选空白,如果您知道在某些地方不需要,请删除它们。

答案 1 :(得分:1)

In [1]: import re

In [2]: string = "{(1N,2N,3N,4N) Hello } Some Content {(5N) World }"

In [3]: re.findall(r"(\((?:(?:10|[1-9])N(?:,|\)))+)\s*(\w+)", string)
Out[3]: [('(1N,2N,3N,4N)', 'Hello'), ('(5N)', 'World')]

In [4]: result = re.findall(r"(\((?:(?:10|[1-9])N(?:,|\)))+)\s*(\w+)", string)

In [5]: nums = [re.findall(r"10N|[1-9]N", item[0]) for item in result]

In [6]: nums
Out[6]: [['1N', '2N', '3N', '4N'], ['5N']]

In [7]: matchString = [s[1] for s in result]

In [8]: matchString
Out[8]: ['Hello', 'World']

对于新字符串:

{{1}}