繁体   English   中英

如何检查一个单词是否包含另一个字符串中的一个字母

[英]How to check if a word contains one letter from another string

我正在开发一个程序,在该程序中我检查一个单词,例如:“Cat”是否包含一个字母。 为此,我尝试if letter in word使用if letter in word但是当我尝试检查单词中的多个字母时它不起作用,因为它会检查单词是否包含每个字母。 我也试过像这样使用 re

import re
bad_letters = "AKS"
word = "Sanctuary"

if re.match(bad_letters, word):
    print("It is a match")

但它不起作用。

这是一个正则表达式解决方案:

import re
bad_letters = "AKS"
word = "Sanctuary"

if re.search(f"[{bad_letters}]", word, re.IGNORECASE):
    print("It is a match")

据称它可能比避免使用正则表达式慢。 在这个例子中,这确实是正确的,但只是相当有限。

$ python3 -mtimeit -s 'bad_letters = "AKSaks"; word = "Sanctuary"' 'any(char in word for char in bad_letters)'
1000000 loops, best of 3: 0.468 usec per loop
$ python3 -mtimeit -s 'bad_letters = "AKS"; word = "Sanctuary"; import re' 're.search(f"[{bad_letters}]", word, re.IGNORECASE)'
1000000 loops, best of 3: 0.622 usec per loop

事实上,在那里测量的一些时间是从坏字符'AKS'构建模式'[AKS]' 'AKS'并编译正则表达式。 如果从计时测量中去掉这一点,那么预编译的正则表达式很容易获胜。

$ python3 -mtimeit -s 'import re; bad_letters = "AKS"; matcher=re.compile(f"[{bad_letters}]", re.IGNORECASE).search; word = "Sanctuary"' 'matcher(word)'
10000000 loops, best of 3: 0.167 usec per loop

如果您还想知道哪个字母匹配:

bad_letters="AKS".lower()
word="Sanctuary".lower()

for blet in bad_letters:
    for let in word:
        if blet==let:
            print("It is a match:",let)
            break

我相信你想检查一个字符串中的坏字母,所以你可以这样做:

    word = "hello"
    string = "EH"
    for letter in string:
        if letter.lower() in word.lower():
            print('success')
        else:
            print('failure')

暂无
暂无

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

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