【发布时间】:2020-06-16 08:47:01
【问题描述】:
我正在尝试匹配看起来像这样的单词
:test:
:soda_stream:
:test3:
等等。我现在拥有的是\:\S+\:,它适用于所有内容,除了我在文本中也有部分只有数字,比如:23:。这些我想排除,但没有成功。我查看了this StackOverflow 页面,但它不起作用。
有人知道怎么做吗?如果: 中只有数字,则可能只是一些添加。
【问题讨论】:
标签: python-3.x regex
我正在尝试匹配看起来像这样的单词
:test:
:soda_stream:
:test3:
等等。我现在拥有的是\:\S+\:,它适用于所有内容,除了我在文本中也有部分只有数字,比如:23:。这些我想排除,但没有成功。我查看了this StackOverflow 页面,但它不起作用。
有人知道怎么做吗?如果: 中只有数字,则可能只是一些添加。
【问题讨论】:
标签: python-3.x regex
考虑到当前示例,您可以使用
:(?!\d+:)[^\s:]+:
详情
: - 冒号(?!\d+:) - 如果有一位或多位数字,则匹配失败,然后在当前位置右侧紧接着 : 进行匹配失败[^\s:]+ - 除空格和冒号之外的 1 个或多个字符: - 冒号【讨论】:
作为替代方案,您可以在冒号之间匹配至少一个不是数字或空格字符的单个字符:
:[^:\s]*[^:\s\d][^:\s]*:
: 字面匹配[^:\s]* 匹配 0+ 次除 : 或空白字符以外的任何字符[^:\s\d] 匹配除 : 或空白字符或数字以外的任何字符[^:\s]* 匹配除 : 或空白字符以外的任何字符 0+ 次: 字面匹配【讨论】: