Java 替换组的正则表达式

Java 替换组的正则表达式,java,regex,Java,Regex,我想用一些字符替换数字前的空格,但无法使用以下正则表达式: String parentString = " 1.skdhhfsdl 2. hkjkj 3.234hbn,m"; String myregex = "/(\\s)[1-9]+./"; String output = parentString.replaceAll(myregex, "$1ppp"); System.out.println(output); 请帮我解正则表达式 更新 通过@Certain

我想用一些字符替换数字前的空格,但无法使用以下正则表达式:

    String parentString = " 1.skdhhfsdl 2. hkjkj 3.234hbn,m";
    String myregex = "/(\\s)[1-9]+./";
    String output = parentString.replaceAll(myregex, "$1ppp");
    System.out.println(output);
请帮我解正则表达式

更新

通过@CertainPerformant和@Wiktor实现建议后,我的代码如下所示:

String myregex = "(\\s)[1-9]+.";
String output = parentString.replaceAll(myregex, "\n");
我希望输出像这样

1.skdhhfsdl
2. hkjkj
3.234hbn,m
但是,我现在得到

1.skdhhfsdl
 hkjkj
234hbn,m
那么:

String myregex = "\\s([1-9]+\\.)";
String output = parentString.replaceAll(myregex, "\n$1");
那么:

String myregex = "\\s([1-9]+\\.)";
String output = parentString.replaceAll(myregex, "\n$1");

你应该使用正则表达式

\s+([1-9]+\.)
请注意,我捕获了数字部分。更换时,通常会捕获要保留的零件。还要注意,我删除了前导斜杠和尾随斜杠,因为Java中不需要它们。
也应该被转义,就像我在这里做的那样

替换为
\n$1
,意思是“新行,然后是组1”


你应该使用正则表达式

\s+([1-9]+\.)
请注意,我捕获了数字部分。更换时,通常会捕获要保留的零件。还要注意,我删除了前导斜杠和尾随斜杠,因为Java中不需要它们。
也应该被转义,就像我在这里做的那样

替换为
\n$1
,意思是“新行,然后是组1”


为了获得预期的输出,您可以使用这个正则表达式

public static void main(String[] args) throws Exception {
    String parentString = " 1.skdhhfsdl 2. hkjkj 3.234hbn,m";
    String myregex = "\\s+(?=[1-9]+\\.)";
    String output = parentString.trim().replaceAll(myregex, "\n");
    System.out.println(output);
}
这只匹配后跟数字和点的一个或多个空格,并且只使用新行替换空格(因为向前看)。parentString.trim()确保在第一行之前不会得到换行符

输出:

1.skdhhfsdl
2. hkjkj
3.234hbn,m

为了获得预期的输出,您可以使用这个正则表达式

public static void main(String[] args) throws Exception {
    String parentString = " 1.skdhhfsdl 2. hkjkj 3.234hbn,m";
    String myregex = "\\s+(?=[1-9]+\\.)";
    String output = parentString.trim().replaceAll(myregex, "\n");
    System.out.println(output);
}
这只匹配后跟数字和点的一个或多个空格,并且只使用新行替换空格(因为向前看)。parentString.trim()确保在第一行之前不会得到换行符

输出:

1.skdhhfsdl
2. hkjkj
3.234hbn,m


您的
$1
将插入捕获的组。如果不想在替换中包含空格,请删除
$1
?删除regex分隔符,它是Java。此外,如果有1个或多个空格,请使用
\s+
。我们只捕获我们需要保留的东西。使用
(\s)
$1
时,保留空格。请提供更多关于您的场景的详细信息。你能控制正则表达式模式吗?如果您需要删除任何数字前的空格,请尝试
parentString.replaceAll(\\s+(?=[0-9]),”)
谢谢您的时间,现在我已经更新了问题。尝试
parentString.replaceAll(\\s+(?=[0-9]),“\n”).trim()
Java不是JavaScript,这里regex的格式不是
/regex/flags
,而只是
regex
(您可以添加带有
(?…)
符号的标志)。另外,您的问题和示例不匹配,因为您使用组1中的匹配(即空格)作为替换的一部分,所以它将只替换匹配的数字(以及一个由点匹配的附加字符,因为您没有转义它)。您的
$1
将插入捕获的组。如果不想在替换中包含空格,请删除
$1
?删除regex分隔符,它是Java。此外,如果有1个或多个空格,请使用
\s+
。我们只捕获我们需要保留的东西。使用
(\s)
$1
时,保留空格。请提供更多关于您的场景的详细信息。你能控制正则表达式模式吗?如果您需要删除任何数字前的空格,请尝试
parentString.replaceAll(\\s+(?=[0-9]),”)
谢谢您的时间,现在我已经更新了问题。尝试
parentString.replaceAll(\\s+(?=[0-9]),“\n”).trim()
Java不是JavaScript,这里regex的格式不是
/regex/flags
,而只是
regex
(您可以添加带有
(?…)
符号的标志)。另外,您的问题和示例不匹配,因为您正在使用组1中的匹配(即空格)作为替换的一部分,所以它将只替换匹配的数字(以及一个由点匹配的附加字符,因为您没有转义它)。它对我有效。好的,把所有的东西放在main方法中,这样你就可以按原样运行了。好的,我得到了我的答案中包含的输出。什么不起作用,你得到了什么输出?它对我起作用。好的,把所有的东西放在main方法中,这样你就可以按原样运行了。好的,我得到了我的答案中包含的输出。什么不起作用了?你得到了什么成果?@Samim是的,令人担忧。尝试了太多的建议,得到了我的代码messy@Samim是的,很抱歉它在工作。尝试了太多的建议,把我的代码弄得一团糟