输入:
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
因为它与第二组匹配。
我想在正则表达式中执行此操作,而不用是否进行检查,是否可以?要检查第一组是否匹配,然后匹配第二组?
答案 0 :(得分:1)
您可以添加lookahead以确保有数字或J
,Q
,K
或A
字母:
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:
详细信息
(?=[0-9JQKA])
-一个正向超前查询,需要在当前位置的右边紧跟一个ASCII数字J
,Q
,K
或A
< / li>
1?
-可选的1
[0-9]?
-可选的ASCII数字[JQKA]?
-字符类中的可选字母:J
,Q
,K
或A
[SHDC]
-一个S
,H
,D
或C
字母。