匹配字符串中的关键字是否以非字母数字词开头/结尾或两者都以非字母数字词开头/结尾

2024-05-20 04:07:46 发布

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

我的要求是简单明了的英语

如果字符串中的关键字以非字母数字开头/结尾或两者都以非字母数字开头/结尾,则匹配,或者完全匹配

关键词:中国

'CHINA', #match
'CHINA ROM' #match
'CHINA WAREHOUSE', #match
'CHINA-WAREHOUSE', #match
'CHINA-ROM', #match
'dsa china', #match
'CHINALOCAL', #No
'CHINAOO' #No

根据我目前对正则表达式的了解,我可以做

keyword = keyword.lower()
if keyword == '' string \ 
    or re.match(r"china[^a-zA-Z0-9]", keyword, flags=re.IGNORECASE) \
    or re.match(r"[^a-zA-Z0-9]china", keyword, flags=re.IGNORECASE) \
    or re.match(r"[^a-zA-Z0-9]china[^a-zA-Z0-9]", keyword, flags=re.IGNORECASE):
    print("matched")

有没有一个正则表达式可以执行我想要的所有检查


Tags: orrematchrom结尾字母数字warehouse
2条回答

对于示例数据,可以使用

^(?:[A-Za-z]+ )*china(?:[ -][A-Za-z]+)*$
  • ^字符串开头
  • (?:[A-Za-z]+ )*重复0+次匹配1+次A-Za-z,后跟空格
  • china逐字匹配
  • ?:[ -][A-Za-z]+)*重复0+次匹配空格或-,然后重复1+次a-Za-z
  • $字符串结尾

Regex demo

data = [
"'CHINA'",
"'CHINA ROM'",
"'CHINA WAREHOUSE'",
"'CHINA-WAREHOUSE'",
"'CHINA-ROM'",
"'dsa china'",
"'CHINALOCAL'",
"'CHINAOO'",
]

import re

for d in data:
    if re.findall(r'[^a-z]china[^a-z]', d, flags=re.I):
        print('{: <20} match!'.format(d))
    else:
        print('{: <20} not match!'.format(d))

印刷品:

'CHINA'              match!
'CHINA ROM'          match!
'CHINA WAREHOUSE'    match!
'CHINA-WAREHOUSE'    match!
'CHINA-ROM'          match!
'dsa china'          match!
'CHINALOCAL'         not match!
'CHINAOO'            not match!

编辑:正如Wiktor在评论中所说的re.findall(r'\bchina\b', d, flags=re.I)可能就是你想要的

相关问题 更多 >