检查列表是不是有一个或多个与正则表达式匹配的字符串

Posted

技术标签:

【中文标题】检查列表是不是有一个或多个与正则表达式匹配的字符串【英文标题】:Check if a list has one or more strings that match a regex检查列表是否有一个或多个与正则表达式匹配的字符串 【发布时间】:2016-04-03 21:10:31 【问题描述】:

如果需要说

if <this list has a string in it that matches this rexeg>:
    do_stuff()

我found这个强大的构造从列表中提取匹配的字符串:

[m.group(1) for l in my_list for m in [my_regex.search(l)] if m]

...但这很难阅读并且矫枉过正。我不想要这个列表,我只想知道这样的列表中是否有任何内容。

有没有更简单的阅读方式来获得答案?

【问题讨论】:

【参考方案1】:

您可以简单地使用any。演示:

>>> lst = ['hello', '123', 'SO']
>>> any(re.search('\d', s) for s in lst)
True
>>> any(re.search('\d4', s) for s in lst)
False

如果您想从字符串的开头强制匹配,请使用re.match

解释

any 将检查可迭代对象中是否存在任何真实值。在第一个示例中,我们传递了以下列表的内容(以生成器的形式):

>>> [re.search('\d', s) for s in lst]
[None, <_sre.SRE_Match object at 0x7f15ef317d30>, None]

它有一个真实的匹配对象,而None 在布尔上下文中将始终评估为False。这就是为什么 any 将在第二个示例中返回 False 的原因:

>>> [re.search('\d4', s) for s in lst]
[None, None, None]

【讨论】:

甜蜜而简单的 REPL 示例!

以上是关于检查列表是不是有一个或多个与正则表达式匹配的字符串的主要内容,如果未能解决你的问题,请参考以下文章

检查文件中是不是存在所有多个字符串或正则表达式

如何检查我的字符串是不是与正则表达式匹配 - Swift 3 [重复]

检查行是不是匹配正则表达式

如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?

如何检查字符串是不是与 Thymeleaf 中的正则表达式匹配?

如何匹配plsql中正则表达式中的列表/数组?