正则表达式忽略引号中的模式(Python或R)
我正在尝试创建一个正则表达式,它允许我查找字符串实例,其中有一个未标记的正则表达式忽略引号中的模式(Python或R),python,r,regex,Python,R,Regex,我正在尝试创建一个正则表达式,它允许我查找字符串实例,其中有一个未标记的/ 例如: 我想出了下面的表达式,它允许我在/之前查找单词字符或右括号,然后查找单词字符或开括号字符 (\w|\))/(\(|\w) 这在大多数情况下都非常有效,但是当我有一个/括在引号中时,我就要崩溃了。在这种情况下,我希望它被忽略。我看过一些不同的帖子和文章。然而,在我的情况下,我无法让它们发挥作用 我想要的是匹配下面确定的前三个案例,忽略最后一个cast,以便提取项目1和项目3 some text/more text
/
例如:
我想出了下面的表达式,它允许我在/
之前查找单词字符或右括号,然后查找单词字符或开括号字符
(\w|\))/(\(|\w)
这在大多数情况下都非常有效,但是当我有一个/
括在引号中时,我就要崩溃了。在这种情况下,我希望它被忽略。我看过一些不同的帖子和文章。然而,在我的情况下,我无法让它们发挥作用
我想要的是匹配下面确定的前三个案例,忽略最后一个cast,以便提取项目1和项目3
some text/more text
(formula)/dividethis
divideme/(byme)
"dont match/me"
这并不漂亮,但这会满足你的要求:
(?<!")(?:\(|\b)[^"\n]+\/[^"\n]+(?:\)|\b)(?!")
(?
让我们把它分解一下:
(?将匹配一个或多个字符,只要它们不是引号或换行符(\n
)
\/
将匹配文本斜杠字符
- 最后,
(?:\)\b)(?!”
将匹配结束括号或单词边界,只要后面没有引号。它通过使用。注意,(?:\)\b)
按此顺序只能100%正确工作-如果您将其反转,它将在括号中删除匹配项,因为它在到达括号之前遇到单词边界
这并不漂亮,但它可以满足您的需求:
(?<!")(?:\(|\b)[^"\n]+\/[^"\n]+(?:\)|\b)(?!")
(?
让我们把它分解一下:
(?将匹配一个或多个字符,只要它们不是引号或换行符(\n
)
\/
将匹配文本斜杠字符
- 最后,
(?:\)\b)(?!”
将匹配一个结束括号或一个单词边界,只要它后面没有引号。它通过使用一个。注意,(?:\)\b)
按此顺序只能100%正确地工作-如果你颠倒它们,它将在括号上删除匹配项,因为它在到达括号之前遇到了单词边界
这将只匹配不在引号内的单词
import re
text = """
some text/more text "dont match/me" divideme/(byme)
(formula)/dividethis
divideme/(byme) "dont match/me hel d/b lo a/b" divideme/(byme)
"dont match/me"
"""
groups=re.findall("(?:\".*?\")|(\S+/\S+)", text, flags=re.MULTILINE)
print filter(None,groups)
输出:
['text/more', 'divideme/(byme)', '(formula)/dividethis', 'divideme/(byme)', 'divideme/(byme)']
- (?:\“*?\”)这将匹配引号内的所有内容,但不会捕获此组
- (\S+/\S+)这将仅匹配引用之外的单词/单词,并且将捕获此组
这将只匹配不在引号内的单词
import re
text = """
some text/more text "dont match/me" divideme/(byme)
(formula)/dividethis
divideme/(byme) "dont match/me hel d/b lo a/b" divideme/(byme)
"dont match/me"
"""
groups=re.findall("(?:\".*?\")|(\S+/\S+)", text, flags=re.MULTILINE)
print filter(None,groups)
输出:
['text/more', 'divideme/(byme)', '(formula)/dividethis', 'divideme/(byme)', 'divideme/(byme)']
- (?:\“*?\”)这将匹配引号内的所有内容,但不会捕获此组
- (\S+/\S+)这将仅匹配引用之外的单词/单词,并且将捕获此组
像match/me“但不是/me”这样的字符串会发生什么事?
我的期望是第一个实例会匹配,但不是第二个。像match/me”但不是/me”这样的字符串会发生什么事?
我的期望是第一个实例会匹配,但不是第二个。这很好,肯定会识别完整的字符串,有没有可能将第一部分(即/
之前)和第二部分(即/
之后)分开?实际计算出(?这是基于python
的转义方法,而不是PHP
,这很好,肯定能识别完整的字符串,有可能分开第一部分吗(即在/
之前)和第二部分(即/
之后)实际解决了(?这是基于python
的转义方法,而不是PHP