什么可以是以下字符串的正则表达式

时间:2009-08-28 19:09:14

标签: regex groovy

我在groovy这样做。

输入:

hip_abc_batch   hip_ndnh_4_abc_copy_from_stgig  abc_copy_from_stgig
hiv_daiv_batch  hip_a_de_copy_from_staging  abc_a_de_copy_from_staging

我想得到最后一栏。基本上任何以abc_开头的东西。

我尝试了以下正则表达式(适用于第二行但不适用于第二行。

\abc_.*\

但是这给了我abc_batch

之后的所有内容

我正在寻找一个正则表达式,它会以abc_开头的任何内容 但我不能使用\^abc_.*\,因为整个字符串不是以abc _

开头的

4 个答案:

答案 0 :(得分:5)

听起来你正在寻找以abc_开头的“单词”(即不包含空格的序列)。你可以试试:

/\babc_.*\b/

\b表示(在某些正则表达式中)“单词边界”。

答案 1 :(得分:3)

试试这个:

/\s(abc_.*)$/m

以下是评论版,因此您可以了解其工作原理:

\s          # match one whitepace character
(abc_.*)    # capture a string that starts with "abc_" and is followed
            # by any character zero or more times
$           # match the end of the string

由于正则表达式具有“m”开关,因此它将是一个多行表达式。这允许$匹配每一行的结尾而不是整个字符串本身的结尾。

编辑:您无需修剪空白,因为第二个捕获组仅包含文本。粗略扫描this tutorial后,我相信这是使用Groovy获取捕获组值的方法:

matcher = (yourString =~ /\s(abc_.*)$/m)
// this is how you would extract the value from 
// the matcher object
matcher[0][1]

答案 2 :(得分:0)

如果您有兴趣,

Regex buddy(付费)和RegExr(免费)可以帮助您学习RegEx。

答案 3 :(得分:0)

我认为你正在寻找这个:\ s(abc_ [a-zA-Z _] *)$

如果您正在使用perl并且您将所有行读成一个字符串,请不要忘记在正则表达式中设置“m”选项(表示“将字符串视为多行”)。

哦,Regex Coach是你的免费朋友。