在java中使用正则表达式搜索字符串
我想知道如何检索字符串数组中存在的更多类似模式,而不管字符串长度和存在多少类似模式 例如: 哈利·詹姆斯·波特也被称为波特先生。波特在哈格沃兹很有名。哈利·詹姆斯·波特也叫波特先生 我需要找到哈利·詹姆斯·波特和波特先生之间的内容:在java中使用正则表达式搜索字符串,java,regex,string,search,substring,Java,Regex,String,Search,Substring,我想知道如何检索字符串数组中存在的更多类似模式,而不管字符串长度和存在多少类似模式 例如: 哈利·詹姆斯·波特也被称为波特先生。波特在哈格沃兹很有名。哈利·詹姆斯·波特也叫波特先生 我需要找到哈利·詹姆斯·波特和波特先生之间的内容: Harry James Potter (.*?) Mr\.Potter 输出应该是 亦称为 也叫 有人能帮我吗 这是我的密码: import java.util.regex.Pattern; import java.util.regex.Matcher; publ
Harry James Potter (.*?) Mr\.Potter
输出应该是
亦称为
也叫
有人能帮我吗
这是我的密码:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexTestHarness {
public static void main(String[] args){
String regex = "Harry James Potter (.*?) Mr.Potter";
String strToSearch = "Harry James Potter also known as Mr.Potter. Harry James Potter is famous as Mr. Potter";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(strToSearch);
while (matcher.find()) {
System.out.println("Text is at "+matcher.group()+"::"+matcher.start()+":: "+matcher.end());
System.out.println(matcher.groupCount());
System.out.println(matcher.group(1));
}
}
}
这个正则表达式将拾取哈利·詹姆斯·波特和波特先生之间的任何内容:
Harry James Potter (.*?) Mr\.Potter
测试
根据您的正则表达式实现,您可能需要检索结果组1。在编写正则表达式字符串时,请确保跳过Mr.Potter中的句点。另外,strToSearch中有随机空格,这会使您的正则表达式无法找到您想要的内容。此代码生成您提供的示例
try {
String regex = "Harry James Potter (.*?) Mr\\.Potter";
String strToSearch = "Harry James Potter also known as Mr.Potter. Potter is very famous in hagwards. Harry James Potter also called Mr.Potter.";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(strToSearch);
int start = 0;
int count = 1;
while (matcher.find(start)) {
System.out.println(count + ". " + matcher.group(1));
start = matcher.end();
count++;
}
} catch(Exception ex) {
ex.printStackTrace();
}
你怎么确定哈利·詹姆斯·波特a.k.a是波特先生?可以是哈利先生或詹姆斯先生?好的。。我想这不是必需的,我只需要哈利·詹姆斯·波特和波特先生指定的字符串之间的模式,如果像哈利先生或詹姆斯先生这样的名字出现在文本中,我只需丢弃它们。你的正则表达式中有波特先生。这个应该逃脱\。特别匹配。而不是任何字符。您的代码当前生成了什么?即使没有指定\before。程序给我这样的输出groupcount产生1作为输出,检索到的组也被称为,但我需要两个输出,也被称为,并且是著名的asYes,这是正确的,但我需要所有这样的组存在,我已经尝试过使用那个正则表达式,但它会检索到从Harry James Potter到字符串末尾的整个文本匹配。请确保您使用的是。*?,而不仅仅是。*。您使用的是哪个版本的正则表达式?应该指定要检索的组非常感谢您。。真的很管用。您已经提出了一点不必要的空格,但是在我得到的文本流中,有很多不必要的空格,程序没有显示,但是存在,那么我应该怎么做才能确保检索到所有存在的模式??
also known as
also called