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

Dan*_*Dan 1 python regex r

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

some characters/morecharacters
Run Code Online (Sandbox Code Playgroud)

我已经提出了下面的表达式,它允许我在我/和单词字符之前找到单词字符或右括号,或者之后打开括号字符.

(\w|\))/(\(|\w)
Run Code Online (Sandbox Code Playgroud)

这适用于大多数情况,但是当我/附上引号时,我会松开.在这种情况下,我希望它被忽略.我在这里这里看过几个不同的帖子.但是,我不能让他们在我的情况下工作.

我想要的是下面确定的前三个案例匹配和最后一个被忽略的演员,允许我提取项目1和项目3.

some text/more text
(formula)/dividethis
divideme/(byme)
"dont match/me"
Run Code Online (Sandbox Code Playgroud)

Seb*_*icz 5

它不漂亮,但这会做你想要的:

(?<!")(?:\(|\b)[^"\n]+\/[^"\n]+(?:\)|\b)(?!")
Run Code Online (Sandbox Code Playgroud)

在Regex101上演示

让我们分解一下:

  • (?<!")(?:\(|\b)将匹配开括号或单词边界,只要它没有前面的引号.它通过采用负面的观察来做到这一点.
  • [^"\n]+将匹配一个或多个字符,只要它们既不是引号也不是换行符(\n).
  • \/ 将匹配文字斜杠字符.
  • 最后,(?:\)|\b)(?!")只要没有引号,就会匹配右括号或单词边界.它通过采用负前瞻来做到这一点.请注意,(?:\)|\b)只会按此顺序100%正确工作 - 如果你反转它们,它会删除括号上的匹配,因为它在到达括号之前遇到单词边界.