繁体   English   中英

如何轻松检查字符串是否包含不应包含在其中的字符?

[英]How do I easily check whether a string contains a character that should not be in there?

我想检查一个字符串是否在此字符串中包含一个字符

invalid = 'gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'

我正在天真地使用for循环:

for ch in invalid:
    if ch in snippet:
        return False

这行得通,但是我想知道是否有更有效或更优雅的方法来做到这一点。

这已经非常有效了,您可能需要查看经过优化的re.search ,并且可以一次搜索所有字符。

我还建议这样做,这确实非常快,并且可以一口气完成它:

invalid = set('gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ')
for i in snippet:
    if i in invalid:
        return False

您可以根据需要进行全套设置,但是我怀疑由于转换时间会更快:

invalid = set('gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ')
if set(snippet) & invalid:
    return False

如果特别是此字符串,则可以进一步优化:

for i in snippet:
    if 'g' <= i <= 'z' or 'G' <= i <= 'Z':
        return False

发出指令后,用in搜索集合是最有效的方法。

my_set = set(list(invalid))

'o' in my_set

您可以设置为获取两个字符串中的公共字符,并告诉您两个字符中的哪些公共字符。 这样,您可以捕获字符串中所有无效的字符。

设置(摘要)和设置(无效)

您可以使用这样的集合

invalid = 'gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'

snippet = 'gJ'
# this will return True because characters in "snippet" are also present in "invalid"
bool(set(invalid).intersection(set(snippet)))

snippet = 'a'
# this will return False because characters in "snippet2" are not there in "invalid"
bool(set(invalid).intersection(set(snippet)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM