鉴于这两个测试字符串:
'eitherxory.'
'justy.'
我想匹配' x' (或者没有,如果' x'不存在)和' y'分别:
('x', 'y')
(None, 'y')
我提出的模式是(x)?.*?(y)
,但匹配是:
(None, 'y')
(None, 'y')
我做错了什么?
我使用的是Python(import re; re.search(pattern, line).groups()
),但问题实际上是通用的。
答案 0 :(得分:2)
一种选择是使用:
(?:(x).*)?(y)
如果我们找到.*
,我们只想匹配x
,因此我们可以将它们组合在一起并将可选的量词移到外面。这避免了.*
从字符串开头占用所有字符的情况。
请注意,如果x
出现在字符串中的y
之后,这将无法奏效。为此你可以使用这样的东西:
(?=.*(x)).*(y)