正则表达式忽略开头字符

| 我敢肯定有一个简单的解决方案,但是这让我陷入困境,所以希望有人可以帮我忙。我有多行输入,如下所示:
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();
然后将提取的字符串用作查找的键。因此,它必须一次性提取密钥。
已邀请:
更换
^Foo\\s*
用空字符串。如果您需要3个任意字符而不是
Foo
,请使用
.{3}
。 如果需要使用匹配而不是替换,则需要使用捕获组:
^Foo\\s*(.*)$
[^Foo\\s?]
是字符类(
[...]
),用于匹配(
^
)和
F
,a12ѭ,空格(
\\s
)或问号
?
以外的任何字符。这就是为什么
Fgh
中的
F
也要匹配的原因。如果要分组括号,请使用use17ѭ。
^.{3}\\s+.*$
应该可以解决问题(它在该行的开头匹配3个任意字符,一个或多个空格,然后匹配直到该行结尾的所有字符)。
关于什么
String text = text.substring(3).trim();
或KennyTM的解决方案
String text = text.replaceFirst(\"^Foo\\\\s*\", \"\");

要回复问题请先登录注册