【发布时间】:2021-04-11 17:14:28
【问题描述】:
我正在尝试创建一个区分变量名和字符串的正则表达式。字符串用引号括起来,变量名由字母数字字符和下划线组成。我正在尝试匹配整行中的子字符串,因此由于^ 锚定到行首,$ 锚定到行尾,因此我避免了这两个。
我排除某些变量名称的问题涉及我的否定前瞻。它只适用于一个字符,我希望这个规则也适用于子字符串的开头。
例如:
(?<!")([A-Za-z_]+[A-Za-z0-9_]*)(?!")
如果这个正则表达式被赋予字符串Hello there,它将返回两个匹配项,Hello 和there。这是意料之中的。但是,如果我在子字符串的末尾添加引号,则直到带有以下引号的字符之前的每个字符仍将作为匹配项返回。例如,Hello there" 将匹配 Hello 和 ther 与此正则表达式。考虑到我在中组比赛中的第一个系列赛,我想这也是有道理的。
我的分组有什么问题?
【问题讨论】:
-
所以你想要
(?<!")\b([A-Za-z_]+[A-Za-z0-9_]*)\b(?!")? -
这肯定更接近我想要的。提供字符串
"Hello there how are you"将排除"Hello和you",但它将匹配there、how和are。我正在考虑的涉及某种递归,以排除引号之间或引号旁边的所有内容。 -
@WiktorStribiżew 基本上是这个解决方案的逆regex101.com/r/W4qMDG/1
-
当你说“逆”时,首先想到的是分裂。编程语言是什么?
-
这是否意味着您要提取这里所有的绿色单词 - regex101.com/r/u4cGMS/1?
re.findall(r''''[^'\\]*(?:\\.[^'\\]*)*'|"[^"\\]*(?:\\.[^"\\]*)*"|(\w+)''', text)
标签: regex