正则表达式 - 如何忽略以下划线开头的字符串

时间:2015-10-15 19:48:51

标签: c# regex

我需要测试此字符串以匹配任何不以下划线开头的内容:

__$id0 = "foo"

我的方法是匹配以下划线开头的字符串,然后将该匹配变为负面预测并捕获其余部分。

测试下划线的工作原理:

(_.*?\s)给出了一个匹配:'__$id0'

然而,将其变为负面预测并没有达到预期的效果:

((?!_.*?\s).*?\s)会产生

MATCH 1
1.  [2-7]   `$id0 `
MATCH 2
1.  [7-9]   `= `
MATCH 3
1.  [9-16]  `"lala"`

下划线从第一个字符串中剥离,但字符串本身仍在结果集中。我想完全排除第一个字符串,因为它以_开头。

如何排除以_开头的字符串?

结果应该是这样的:

MATCH 1
1.  [7-9]   `= `
MATCH 2
1.  [9-16]  `"lala"`

(资料来源:https://www.regex101.com/r/cC2pV7/1

2 个答案:

答案 0 :(得分:2)

您应首先使用^检查行的开头。然后,您希望匹配不是下划线的任何内容,因此您使用倒置字符类:[^_]

^([^_].*?)\s*=\s*(.*?)

Working example

答案 1 :(得分:1)

这就是诀窍......匹配你不想保留的东西,然后匹配并捕获其他所有东西。

[\s]?_[^\s]*|\s?(.*?)\s+?

|管道的左侧,您将匹配以下划线开头的任何内容。如果它匹配,则需要正则表达式的那一侧。否则,尝试匹配下划线的右侧,该下划线被捕获并匹配任何不以下划线开头的内容。

当字符串的中间或末尾有下划​​线时,这也可以匹配。

https://www.regex101.com/r/cC2pV7/3