正则表达式忽略前导字符

时间:2011-04-19 12:48:06

标签: java regex

我确信这有一个简单的解决方案,但它让我陷入困境,所以希望有人可以帮助我。我有多行输入,如下所示:

FooABC
Foo XYZ123
FooFgh

我需要一个正则表达式(在Java中),它会给我:

ABC
XYZ123
Fgh

到目前为止,我提出的最好的是:

[^Foo\s?].*$

我认为这是有效的,直到我注意到它从Fgh移除了首都F.有什么方法可以让它完全忽略前三个字符和一个或多个空白字符然后捕获其他所有字符?

编辑/澄清

我应该说我不能使用substring / replace或者我在这种情况下通常会做的任何事情,因为这个正则表达式将被提供给当前无法更新的已部署代码。代码的作用是:

Pattern pattern = Pattern.compile( regex );
Matcher matcher = pattern.matcher( data );
matcher.find();
String extracted = matcher.group();

然后使用提取的字符串作为查找的键。所以它必须一次性提取密钥。

3 个答案:

答案 0 :(得分:6)

替换

^Foo\s*

带有空字符串。如果您需要3个任意字符而不是.{3},请使用Foo


如果您需要使用匹配而不是替换,则需要使用捕获组:

^Foo\s*(.*)$

[^Foo\s?]是一个字符类([...]),用于匹配除(^F之外的任何字符,{{1 },一个空格(o)或一个问号\s。这就是?中的F也匹配的原因。如果您需要分组括号,请使用Fgh

答案 1 :(得分:1)

^.{3}\s+.*$

应该做的伎俩(它匹配行开头的3个任意字符,一个或多个空格,然后是直到行尾的任何内容)。

答案 2 :(得分:1)

怎么样?
String text = text.substring(3).trim();

或KennyTM的解决方案

String text = text.replaceFirst("^Foo\\s*", "");