我如何使用正则表达式搜索句子内部而不是区分大小写

2024-10-02 02:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python正则表达式的新手:
我有一个列表,我想搜索它是否包含员工姓名。在

员工姓名可以是:

  • 它可以在开头加空格。在
  • 其次是
  • 或者后面跟着空格
  • 也可以在它的末端和前面的空间
  • 不区分大小写

ListSentence = ["Steve®", "steveHotel", "Rob spring", "Car Daniel", "CarDaniel","Done daniel"]
ListEmployee = ["Steve", "Rob", "daniel"]

ListSentence的输出是:

^{pr2}$

Tags: 列表员工空间car区分steve姓名空格
3条回答

我不认为你需要检查所有这些情况。我想你要做的就是检查一下有没有断字。在

您可以使用|加入ListEmployee列表,使之成为一个或或正则表达式(也可以将其小写以表示不区分大小写),并用\b包围以表示分词,这样应该可以:

regex = '|'.join(ListEmployee).lower()
import re
[l for l in ListSentence if re.search(r'\b(%s)\b' % regex, l.lower())]

应输出:

^{pr2}$

为什么要使用正则表达式?我通常建议在Python中避免使用它们-可以使用string方法。在

例如:

def string_has_employee_name_in_it(test_string):
    test_string = test_string.lower() # case insensitive
    for name in ListEmployee:
        name = name.lower()
        if name == test_string:
            return True
        elif name + '®' == test_string:
            return True
        elif test_string.endswith(' ' + name):
            return True
        elif test_string.startswith(name + ' '):
            return True
        elif (' ' + name + ' ') in test_string:
            return True
    return False   

final_list = []
for string in ListSentence:
    if string_has_employee_name_in_it(string):
        final_list.append(string)

最终的清单就是你想要的清单。这比正则表达式要长,但它也更易于解析和维护。您可以通过各种方式使其更短(例如,组合函数中的测试,使用列表理解而不是循环),但是当您开始使用Python时,最好弄清楚发生了什么。在

首先,获取所有员工的姓名,并用|字符将它们连接起来,然后将字符串包装为:

(?:^|\s)((?:Steve|Rob|Daniel)(?:®)?)(?=\s|$)enter image description here

通过首先将所有名称连接在一起,可以避免使用fornext循环的嵌套集所带来的性能开销。在

我对python的了解还不足以提供python示例,但是在powershell中,我会这样写的

[array]$names = @("Steve", "Rob", "daniel")
[array]$ListSentence = @("Steve®", "steveHotel", "Rob spring", "Car Daniel", "CarDaniel","Done daniel")

# build the regex, and insert the names as a "|" delimited string
$Regex = "(?:^|\s)((?:" + $($names -join "|") + ")(?:®)?)(?=\s|$)" 

# use case insensitive match to find any matching array values
$ListSentence -imatch $Regex

收益率

^{pr2}$

相关问题 更多 >

    热门问题