我有一系列这种格式的字符串:
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'元素,我就可以进行简单的字符串匹配来找到孩子。)
答案 0 :(得分:0)
您的模式不会按照您的想法执行。它将匹配单个A
,n
,y
或1
字符,后跟文字_from
,后跟单个A
, n
,y
或2
字符。字符串周围的起点(^
)和结束($
)锚点也将确保整个字符串必须与模式匹配,而不仅仅是子字符串。
也许你想要一个这样的模式:
^(.*)_from([^_]*)
这将匹配在组1中捕获的任何字符中的零个或多个,后跟文字_from
,后跟除了下划线之外的任何字符中的零个或多个,在组2中捕获。它还将允许任何字符跟随匹配的子字符串的其他字符。
或者可能这样:
^([^_]*)_from([^_]*)
这将匹配除了下划线以外的任何字符中的零个或多个,在第1组中捕获,后跟文字_from
,然后是第2组中捕获的除下划线以外的任何字符中的零个或多个。它将还允许任何其他字符跟随匹配的子字符串。
答案 1 :(得分:0)
指定除下划线以外的非空字符序列的方法是
[^_]+
当你在一个字符类中放置一个^
符号(这是一组可以通过方括号语法定义的字符的花哨名称)时,字符类会被反转:它匹配所有 not 包含在类中,而不是匹配包含的内容。
在您的情况下,整体表达式如下所示:
^[^_]+_from[^_]+$