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

Regex 以下字符串的正则表达式可以是什么,regex,groovy,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\U批处理之后的一切 我正在寻找一个正则表

我用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\U批处理之后的一切

我正在寻找一个正则表达式,它可以为我获取任何以
abc\uuu
但是我不能使用
^abc.*\
,因为整个字符串不是以abc开头的。

请尝试以下操作:

/\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
”开关,因此它将是一个多行表达式。这允许
$
匹配每行的结尾,而不是整个字符串本身的结尾

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

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

听起来像是在寻找以
abc\uuu
开头的“单词”(即不包含空格的序列)。您可以尝试:

/\babc_.*\b/

\b
的意思是(在某些正则表达式中)单词边界。

我想你是在寻找这个:
\s(abc_uz[a-zA-Z]*)$

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


哦,这是您的免费朋友。

这很有效!但它也会将abc前面的空格返回给我。有没有办法不获取前导空格?您想使用返回的\1或$1值,但不确定它在groovy中如何工作。“(…)”节捕获一个组,通常$0是全部,$1是第一个组。@josh-Adam是正确的,我只捕获了括号中您需要的文本。@Adam-谢谢!:)谢谢大家。perl甚至无法与groovy进行比较:),但我可以通过执行以下s.replaceAll(/^\s+/,“”)@josh来修复前导空格-请查看我的编辑,我道歉,因为这是我一生中编写的第一个groovy代码。
*
可能太贪婪了<代码>\S+可能比+1更好。我会使用
\w+
而不是
*
,但答案的核心是正则表达式开头的
\b