我正在尝试创建一个正则表达式,它允许我找到一个字符串的实例,其中我有一个没有空格的 /
例如:
some characters/morecharacters
我想出了下面的表达式,它允许我在我的 /
之前找到单词字符或右括号,然后找到单词字符或左括号字符。
(\w|\))/(\(|\w)
这在大多数情况下都适用,但是当我将 /
括在引号中时,我会感到困惑。在这种情况下,我希望它被忽略。我看过几个不同的帖子 here和 here .但是,我不能完全让它们在我的情况下工作。
我想要的是下面确定的前三个案例匹配,最后一个转换被忽略,允许我提取第 1 项和第 3 项。
some text/more text
(formula)/dividethis
divideme/(byme)
"dont match/me"
最佳答案
它并不漂亮,但它会做你想做的事:
(?<!")(?:\(|\b)[^"\n]+\/[^"\n]+(?:\)|\b)(?!")
让我们分解一下:
-
(?<!")(?:\(|\b)
将匹配左括号或单词边界,只要它前面没有引号。它通过使用 negative lookbehind 来做到这一点. -
[^"\n]+
将匹配一个或多个字符,只要它们既不是引号也不是换行符 (\n
)。 -
\/
将匹配文字斜杠字符。 - 最后,
(?:\)|\b)(?!")
只要后面没有引号,就会匹配右括号或单词边界。它通过使用 negative lookahead 来做到这一点.请注意(?:\)|\b)
只会按此顺序 100% 正确地工作 - 如果您颠倒它们,它会将匹配项放在括号中,因为它在到达括号之前遇到了单词边界。
关于python - 正则表达式忽略引号中的模式(Python 或 R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581525/