如何修改正则表达式以匹配含指定条件的car-wash文本?
问题描述
我写了正则表达式regex = "car\S*\s*(\w+\s+){1,2}\s*\S*wash",这个正则能匹配car与wash之间包含1-2个单词的文本,例如"car. was good ?wash"等,但无法匹配夹杂任意标点的同类文本,比如"Car, not ... (?!) wash"这类。需求是修改正则,使其能匹配以car开头、wash结尾,中间含1-2个单词且可夹杂任意标点和空格的文本。原测试代码如下:
import re # Define the regular expression regex = "car\S*\s*(\w+\s+){1,2}\s*\S*wash" # Use the re.search() function to find a match match = re.search(regex, "Car, not ... (?!) wash", flags=re.I) # Check if a match was found if match: print("Match found: ", match.group(0)) else: print("No match found")
修改方案
原正则的问题在于仅用\w+匹配单词,且未允许单词前后夹杂任意标点或空格。修改后的正则可以适配任意标点和空格的场景:
import re # 修改后的正则表达式 regex = r"^car[^\w]*(?:\w+[^\w]*){1,2}wash$" # 测试目标文本 test_text = "Car, not ... (?!) wash" # 执行匹配 match = re.search(regex, test_text, flags=re.I) if match: print("Match found: ", match.group(0)) else: print("No match found")
正则说明
^car:匹配以car开头(re.I标志忽略大小写)[^\w]*:匹配任意数量的非单词字符(包括标点、空格、换行等)(?:\w+[^\w]*){1,2}:匹配1-2个完整单词,每个单词前后可以跟随任意非单词字符wash$:匹配以wash结尾
运行上述代码后,会成功匹配"Car, not ... (?!) wash"这类文本。
内容的提问来源于stack exchange,提问作者user_12
相关产品推荐
相关产品推荐

