Skip to main content
 首页 » 编程设计

python之正则表达式忽略引号中的模式(Python 或 R)

2025年05月04日32JustinYoung

我正在尝试创建一个正则表达式,它允许我找到一个字符串的实例,其中我有一个没有空格的 / 例如:

some characters/morecharacters 

我想出了下面的表达式,它允许我在我的 / 之前找到单词字符或右括号,然后找到单词字符或左括号字符。

(\w|\))/(\(|\w) 

这在大多数情况下都适用,但是当我将 / 括在引号中时,我会感到困惑。在这种情况下,我希望它被忽略。我看过几个不同的帖子 here和 here .但是,我不能完全让它们在我的情况下工作。

我想要的是下面确定的前三个案例匹配,最后一个转换被忽略,允许我提取第 1 项和第 3 项。

some text/more text 
(formula)/dividethis 
divideme/(byme) 
"dont match/me" 

请您参考如下方法:

它并不漂亮,但它会做你想做的事:

(?<!")(?:\(|\b)[^"\n]+\/[^"\n]+(?:\)|\b)(?!") 

Demo on Regex101

让我们分解一下:

  • (?<!")(?:\(|\b)将匹配左括号或单词边界,只要它前面没有引号。它通过使用 negative lookbehind 来做到这一点.
  • [^"\n]+将匹配一个或多个字符,只要它们既不是引号也不是换行符 ( \n )。
  • \/将匹配文字斜杠字符。
  • 最后,(?:\)|\b)(?!")只要后面没有引号,就会匹配右括号或单词边界。它通过使用 negative lookahead 来做到这一点.请注意 (?:\)|\b)只会按此顺序 100% 正确地工作 - 如果您颠倒它们,它会将匹配项放在括号中,因为它在到达括号之前遇到了单词边界。