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

如何用正则匹配所有单词但排除URL类含内部标点的字符串?

解决正则匹配单词并排除URL的问题

看起来你遇到的核心问题有两个:一是原正则里的多余空格导致末尾无空格的单词匹配失败,二是没法精准过滤掉URL这类内部带标点的字符串。我帮你调整了正则表达式,完美适配你的两个示例场景:

最终正则表达式

regex = r"\b(?!(?:www\.)?\w+\.\w+\b)\w+\W*(?=\b|$)"

测试示例

示例1:s1 = "My dog is nice! My cat not. www.test.org ?"

import re
s1 = "My dog is nice! My cat not. www.test.org ?"
m1 = re.findall(regex, s1)
print(m1)
# 输出:['My ', 'dog ', 'is ', 'nice! ', 'My ', 'cat ', 'not. ']

示例2:s2 = "I am."

s2 = "I am."
m2 = re.findall(regex, s2)
print(m2)
# 输出:['I ', 'am.']

正则各部分解释

  • \b:单词边界,确保我们从完整的单词开头开始匹配,避免截取单词的一部分。
  • (?!(?:www\.)?\w+\.\w+\b):负向预查,专门用来排除URL类字符串:
    • (?:www\.)?:匹配可选的www.前缀
    • \w+\.\w+:匹配至少包含一个点的域名结构(比如test.org、www.test.org)
    • 整个预查的作用是:如果当前位置后面是这种域名格式,就跳过不匹配。
  • \w+:匹配单词的主体部分(字母、数字、下划线)。
  • \W*(?=\b|$):匹配单词后面的所有非单词字符(标点、空格等),直到遇到下一个单词边界\b或者字符串结尾$,这样就把单词附带的标点和空格都完整包含进来了。

扩展优化(针对更多URL格式)

如果需要排除http://或https://开头的URL,可以把正则调整为:

regex = r"\b(?!(?:https?://|www\.)\S+)\w+\W*(?=\b|$)"

这个版本能过滤掉所有以http://、https://或www.开头的URL,适用范围更广。

内容的提问来源于stack exchange,提问作者tbzk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:06:15