作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只想在字符串中搜索两个连续数字的实例。如果找到这样的实例,我想对其进行分组,否则不为该特定组返回任何值。我认为这是微不足道的,但我不明白我哪里出错了。在下面的示例中,删除可选的 (?) 字符会得到数字,但在没有数字的字符串中,r
的计算结果为 None,因此 r.groups() 会抛出异常。
p = re.compile(r'(\d{2})?')
r = p.search('wqddsel78ffgr')
print r.groups()
>>>(None, ) # why not ('78', )?
# --- 更新/澄清 --- #
感谢您的回答,但给出的解释让我一头雾水。这是另一种方法,可以准确指出我不明白的是什么。
pattern = re.compile(r'z.*(A)?')
_string = "aazaa90aabcdefA"
result = pattern.search(_string)
result.group()
>>> zaa90aabcdefA
result.groups()
>>> (None, )
我明白为什么 result.group()
会产生它的结果,但为什么 result.groups()
不会产生 ('A', )
?我认为它是这样工作的:一旦正则表达式命中 z
,它就会使用 .*
匹配到行尾。尽管 .*
匹配所有内容,正则表达式引擎知道它传递了一个可选组,并且由于 ?
意味着它会尝试匹配,如果可以的话,它应该向后工作以尝试匹配。将 ?
替换为 +
会返回 ('A', )
。这表明 ?
如果没有必要则不会尝试匹配,但这似乎与我读过的关于这个主题的大部分内容形成对比(尤其是 J. Friedl 的优秀书籍) .
最佳答案
这对我有用:
p = re.compile('\D*(\d{2})?')
r = p.search('wqddsel78ffgr')
print r.groups() # ('78',)
r = p.search('wqddselffgr')
print r.groups() # (None,)
关于python - 简单 python 正则表达式中的可选分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13270514/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!