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

mon*_*top 5 python regex search list

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

员工姓名可以是:

  • 它可以在开始之后是空间.
  • 然后是®
  • 或其后是空格
  • 或者可以在它之前的结尾和空间
  • 不区分大小写

ListSentence = ["Steve®", "steveHotel", "Rob spring", "Car Daniel", "CarDaniel","Done daniel"]
ListEmployee = ["Steve", "Rob", "daniel"]
Run Code Online (Sandbox Code Playgroud)

来自的输出ListSentence是:

["Steve®", "Rob spring", "Car Daniel", "Done daniel"]
Run Code Online (Sandbox Code Playgroud)

Ro *_* Mi 6

首先获取所有员工姓名并将其与|角色联系起来并将其包装起来,使其看起来像:

(?:^|\s)((?:Steve|Rob|Daniel)(?:®)?)(?=\s|$) 在此输入图像描述

通过首先将所有名称连接在一起,可以避免使用嵌套的下一个循环的性能开销.

我不太了解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
Run Code Online (Sandbox Code Playgroud)

产量

Steve®
Rob spring
Car Daniel
Done daniel
Run Code Online (Sandbox Code Playgroud)

  • 漂亮的图表,你用它做了什么? (3认同)

boz*_*doz 2

我认为您不需要检查所有这些情况。我认为你需要做的就是检查断词。

您可以加入 ListEmployee 列表以|创建一个 或 正则表达式(也可以将其小写以不区分大小写),\b并用单词分隔符包围,这应该可以工作:

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

应该输出:

['Steve\xb6\xa9', 'Rob spring', 'Car Daniel', 'Done daniel']
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此处的“\b”符号将允许像“dog&daniel#moretext”这样的字符串,这将不符合标准 (3认同)
  • 你的权利,这是一个延伸,但是想象一下某人的姓氏带有连字符“Ray-Steven”,这可以与“\bRay\b”或“\bSteven\b”匹配 (3认同)