我试图找到一个正则表达式,它会像 \w+ 那样拆分文本,但会跳过两个星号之间的任何内容。
我能够通过以下内容识别标记出的内容:(?<=\*)(.*)(?=\*)。
我尝试使用像这样的否定前瞻/后视语句:(?<!\*)([\w]+)(?!\*),但这匹配每个单词,包括星号之间的单词,星号前后的第一个字符除外(例如句子“The river *runs slowly* but surely"将匹配 The 、 river 、 uns 、 slowl 、 but 、 surely ,而所需的匹配项仅为 The 、 river 、 but 和 surely )。
我还尝试用非捕获组围绕原始表达式:(?:\*(.*?)\*),我希望它不会从我的测试字符串中返回任何内容,但奇怪的是它在没有非捕获的情况下返回了它所做的事情。
任何帮助将不胜感激。我整个上午都在阅读它,在这一点上我同样感到困惑。我在这里浏览了 [regex] 标签,用谷歌搜索,阅读了有关正则表达式的信息,但无法组合出适合我需要的表达式。
请您参考如下方法:
你可以匹配你不需要的,也可以匹配捕获你需要的:
\*[^*]*\*|(\w+)
参见 regex demo .将它与 re.findall 一起使用,如果在正则表达式模式中定义了捕获组,则只返回 捕获的 子字符串。
详情
\*[^*]*\*-*,然后是*以外的任何 0+ 个字符,然后是*|- 或者(\w+)- 捕获第 1 组:一个或多个单词字符(字母、数字、下划线)。要仅匹配字母,请使用([^\W\d_]+)。
参见 Python demo :
import re
s = "The river *runs slowly* but surely"
res = re.findall(r'\*[^*]*\*|(\w+)', s)
print(list(filter(None, res)))
# => ['The', 'river', 'but', 'surely']
