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)
首先获取所有员工姓名并将其与|角色联系起来并将其包装起来,使其看起来像:
(?:^|\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)
我认为您不需要检查所有这些情况。我认为你需要做的就是检查断词。
您可以加入 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)