正则表达式通配符仅匹配没有下划线的字符串

时间:2013-09-13 02:29:47

标签: .net regex

我有一系列这种格式的字符串:

Something_fromSomewhere
Something_fromSomewhere_ABC123
Something_fromSomewhere_DEF456
Something_fromSomewhereElse
Something_fromSomewhereElse_GHI123

我正试图将它们分组......

Something_fromSomewhere
    Something_fromSomewhere_ABC123
    Something_fromSomewhere_DEF456

Something_fromSomewhereElse
    Something_fromSomewhereElse_GHI123

所以我想挑选出包含这种模式的字符串:

^[Any1]_from[Any2]$

但我只想挑选Any2不包含任何下划线的行。我怎么能这样做?

(一旦我获得'root'元素,我就可以进行简单的字符串匹配来找到孩子。)

2 个答案:

答案 0 :(得分:0)

您的模式不会按照您的想法执行。它将匹配单个Any1字符,后跟文字_from,后跟单个Any2字符。字符串周围的起点(^)和结束($)锚点也将确保整个字符串必须与模式匹配,而不仅仅是子字符串。

也许你想要一个这样的模式:

^(.*)_from([^_]*)

这将匹配在组1中捕获的任何字符中的零个或多个,后跟文字_from,后跟除了下划线之外的任何字符中的零个或多个,在组2中捕获。它还将允许任何字符跟随匹配的子字符串的其他字符。

或者可能这样:

^([^_]*)_from([^_]*)

这将匹配除了下划线以外的任何字符中的零个或多个,在第1组中捕获,后跟文字_from,然后是第2组中捕获的除下划线以外的任何字符中的零个或多个。它将还允许任何其他字符跟随匹配的子字符串。

答案 1 :(得分:0)

指定除下划线以外的非空字符序列的方法是

[^_]+

当你在一个字符类中放置一个^符号(这是一组可以通过方括号语法定义的字符的花哨名称)时,字符类会被反转:它匹配所有 not 包含在类中,而不是匹配包含的内容。

在您的情况下,整体表达式如下所示:

^[^_]+_from[^_]+$