Python,正则表达式-仅在第一组匹配的情况下如何匹配第二组

时间:2019-06-12 06:44:51

标签: python regex python-3.x

输入:

2SASKS6SJSQSOS

预期输出:

2S AS KS 6S JS QS

我的代码:

import re

row = input()

pattern = r"([1]?[0-9]?[JQKA]?)([SHDC])"

result = ''

for (first, second) in re.findall(pattern, row):
    if first and second:
        result += first + second + ' '

print(result)

所以目前它有效,因为此检查do the magic

if first and second:

如果没有此检查,它将返回:

2S AS KS 6S JS QS S 

因为它与第二组匹配。

我想在正则表达式中执行此操作,而不用是否进行检查,是否可以?要检查第一组是否匹配,然后匹配第二组?

1 个答案:

答案 0 :(得分:1)

您可以添加lookahead以确保有数字或JQKA字母:

import re
row = '2SASKS6SJSQSOS'
pattern = r"(?=[0-9JQKA])(1?[0-9]?[JQKA]?)([SHDC])"
result = [x.group() for x in re.finditer(pattern, row)]
print(result) # => ['2S', 'AS', 'KS', '6S', 'JS', 'QS']

甚至

result = re.findall(r"(?=[0-9JQKA])1?[0-9]?[JQKA]?[SHDC]", row)

请参见Python demo

之所以有效,是因为第二组模式与第一组中的模式不重叠。

请参见regex graph

enter image description here

详细信息

  • (?=[0-9JQKA])-一个正向超前查询,需要在当前位置的右边紧跟一个ASCII数字JQKA < / li>
  • 1?-可选的1
  • [0-9]?-可选的ASCII数字
  • [JQKA]?-字符类中的可选字母:JQKA
  • [SHDC]-一个SHDC字母。