You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改正则表达式以匹配含指定条件的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:20:33