我用简单的英语表达的要求
匹配字符串中的关键字是否以非字母数字单词开头或结尾或同时以非字母数字匹配或完全匹配
关键字:中国
'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")
是否有可以执行我想要的所有检查的单个正则表达式?
答案 0 :(得分: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 $
字符串结尾答案 1 :(得分:1)
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)
可能就是您想要的!