Java 查找子字符串
我有一条像绳子一样的线Java 查找子字符串,java,regex,string,Java,Regex,String,我有一条像绳子一样的线 Strig foo = "PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something to be extracted]jdjdjdj" 我希望输出为“要提取的内容”,其中字符串的正则表达式是Principle*Teacher*Class*List[*]*。 在此之后,创建一个新字符串 Strig foo = "PrinciplexbxbxbxbxbxbTeachershshshshsh
Strig foo = "PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something to be extracted]jdjdjdj"
我希望输出为“要提取的内容”,其中字符串的正则表达式是Principle*Teacher*Class*List[*]*。
在此之后,创建一个新字符串
Strig foo = "PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something new]jdjdjdj"
如果您的
字符串始终采用相同的格式,并且包含单词Principle
、Teachers
和Class
,后跟[一些文本]
,那么这就是您需要的:
Principle\\w*Teachers\\w*Class\\w*\\[([\\s\\w]+)\\]\\w*
\\[([\\s\\w]+)\\]
中的匹配组将匹配您需要的字符串
您的代码如下所示:
final String regex = "Principle\\w*Teachers\\w*Class\\w*\\[([\\s\\w]+)\\]\\w*";
final String string = "Strig foo = \"PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something to be extracted]jdjdjdj\"\n";
string.replaceAll(regex, "something new");
如果您的字符串始终采用相同的格式,并且包含单词Principle
、Teachers
和Class
,后跟[一些文本]
,那么这就是您需要的:
Principle\\w*Teachers\\w*Class\\w*\\[([\\s\\w]+)\\]\\w*
\\[([\\s\\w]+)\\]
中的匹配组将匹配您需要的字符串
您的代码如下所示:
final String regex = "Principle\\w*Teachers\\w*Class\\w*\\[([\\s\\w]+)\\]\\w*";
final String string = "Strig foo = \"PrinciplexbxbxbxbxbxbTeachershshshshshhsClassdhdhdhhdhdhdList[something to be extracted]jdjdjdj\"\n";
string.replaceAll(regex, "something new");
如果您想获取要提取的内容
,则可以提取两个括号之间的所有内容\[(.*)\]
,您可以使用如下模式:
String foo = ...;
String regex = "\\[(.*)\\]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(foo);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
如果要替换它,可以将replaceAll与相同的正则表达式一起使用:
foo = foo.replaceAll("\\[.*?\\]", "[something new]");
如果您想获取要提取的内容
则可以提取两个括号之间的所有内容\[(.*?)\]
,您可以使用如下模式:
String foo = ...;
String regex = "\\[(.*)\\]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(foo);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
如果要替换它,可以将replaceAll与相同的正则表达式一起使用:
foo = foo.replaceAll("\\[.*?\\]", "[something new]");
到底是什么问题?您尝试了什么?您已经提到了regex(尽管您发布的字符串不是合适的regex),那么问题出在哪里呢?*
在regex中不是通配符;它是一个量词:它应用于前面的标记来描述它可以发生任意次数(包括0)。对于所需的通用通配符*
,它是任意次数的任意字符。正则表达式:@arminb and all。谢谢你的regex101链接。这将非常有帮助。到底是什么问题?你尝试了什么?您已经提到了regex(尽管您发布的字符串不是合适的regex),那么问题出在哪里呢?*
在regex中不是通配符;它是一个量词:它应用于前面的标记来描述它可以发生任意次数(包括0)。对于所需的通用通配符*
,它是任意次数的任意字符。正则表达式:@arminb and all。谢谢你的regex101链接。这将非常有帮助