如何使用正则表达式选择除捕获组之外的所有内容?
Posted
技术标签:
【中文标题】如何使用正则表达式选择除捕获组之外的所有内容?【英文标题】:How do I select everything except the capture group with Regex? 【发布时间】:2014-11-01 02:03:28 【问题描述】:问题:
暂时忘记下面的一切,因为我的细节似乎让人们感到困惑(否则这真的很复杂)。
我想用正则表达式匹配“除了这个(任何)捕获组匹配的所有内容”。
我的尝试:
I saw this question,但答案和问题都在谈论一种情况,而没有真正解释语法如何/为什么起作用,所以我无法弄清楚。
我用?!
查看了“负面展望”,但并不真正理解它是如何实现我想要做的。
我正在尝试匹配除捕获组之外的所有内容,例如 ("[a-z]*",)
。
例如,在这个多行列表中:
"buckeye",
"buckeye"
,
."
,"
"fbfdb
"feve,
如何使用 Regex 选择除捕获组(在我的情况下应匹配 "buckeye",
或任何一组 "
+ 任意 num a-z 字符 + ",
)之外的所有内容?
之所以需要这个是因为我有一个包含很多条目的文件,例如:
"aidman",
"aidmen",
"aids",
"aiglet",
"aiglets",
"aigret",
"aigrets",
"aigrette",
"aigrettes",
"aiguille",
"aiguilles",
"aikido",
我用我的文本编辑器对其进行了一些替换以更改格式,但是在 100,000 行中的大约 20 行中发生了一堆随机的事情(一个错误)。所以我需要找到格式不正确的行。
澄清:
我对这个问题的目标只是了解如何说“我想匹配除此捕获组之外的所有内容”。
【问题讨论】:
我不明白“除捕获组之外的所有内容”是什么意思。举几个例子说明你想匹配什么,你不想匹配什么。 @Dialectus 我在上面澄清了,对不起。但实际上,我正在尝试学习如何使用 any 捕获组。 预期的输出是什么? @AvinashRaj 我想匹配 不 匹配该捕获组的任何内容。 所以你想匹配除"buckeye",
..以外的所有字符。
【参考方案1】:
您可以使用 PCRE 动词 (*SKIP)(*F)
,
"[^"]*",(*SKIP)(*F)|.+
DEMO
上述正则表达式将跳过所有"...",
字符串并匹配剩余的行。
或
通过否定前瞻断言,
^(?!.*"[^"]*",).*$
DEMO
(?!.*"[^"]*",)
否定前瞻断言在该特定行中没有像 "...",
这样的字符串。如果是,则将匹配相应的行。正则表达式中的循环用于条件检查。它不会消耗任何字符,但会断言是否会发生匹配。
^ the beginning of the string
(?! look ahead to see if there is not:
.* any character except \n (0 or more
times)
" '"'
[^"]* any character except: '"' (0 or more
times)
", '",'
) end of look-ahead
.* any character except \n (0 or more times)
$ before an optional \n, and the end of the
string
【讨论】:
哦,原来如此!谢谢你。我希望你能解释一下,这样我以后就知道该怎么做了。 @jt0dd 哪一个?第一个或第二个.. 我想我已经解释了第二个。告诉我你不明白的部分。 嗯,它们看起来都比我目前使用的更复杂(抱歉,还在学习中),你能解释一下*两者是如何工作的吗? 为什么在负前瞻部分的开头有.*
?此模式将跳过 b"uckeye",
在我看来这几乎是不正确的行。
然后从前瞻 ^(?!"[^"]*",).*$
中删除 .*
。谁知道 op 到底想要什么....【参考方案2】:
所以您想在文件中查找错误,其中正确的行格式为"[a-z]*",
。虽然我不能说如何在正则表达式中做到这一点,但我可以说我将如何实现这个目标。我会在几个步骤中使用 Notepad++:
-
Ctrl+F,将选项卡从查找更改为标记,选中“书签行”选项,然后搜索模式
"[a-z]*",
。
当所有正确的行都成为书签时,反转书签(菜单搜索 > 书签 > 反转书签)
复制所有带书签的行(菜单搜索 > 书签 > 复制带书签的行),并将它们粘贴到另一个空文件 (Ctrl+V)
【讨论】:
感谢这间接地很棒,因为它现在保存了我的 *ss。我很惊讶,似乎没有人知道如何在正则表达式中做“除了这个捕获组之外的所有事情”!以上是关于如何使用正则表达式选择除捕获组之外的所有内容?的主要内容,如果未能解决你的问题,请参考以下文章