我想将模式与字符串以及之前和之后的字符分开。
我有一个像这样的字符串ihavehashasaahasabig,其模式为3“has”,我希望在第一个“has”之前有一个字符,在最后“has”之后有一个字符。
输出应该是这样的。
ehashasaahasa
但是当我使用这段代码时
String seq1="ihavehashasaahasabig";
Pattern pat =Pattern.compile("\\w.has.*?has.*?has.\\w");
Matcher m=pat.matcher(seq1);
while (m.find())
{
System.out.println(m.group());}
输出如下: - vehashasaahasab
现在我该怎么做才能解决我的问题。
答案 0 :(得分:2)
将您的正则表达式修改为.has.*?has.*?has.
String seq1="ihavehashasaahasabig";
Pattern pat =Pattern.compile(".has.*?has.*?has.");
Matcher m=pat.matcher(seq1);
while (m.find())
{
System.out.println(m.group());}
<强>输出强> ehashasaahasa
答案 1 :(得分:1)
你可以使用贪婪量词:
Pattern pat =Pattern.compile(".has.*has.");
使用贪婪的量词,忽略中间的 。
答案 2 :(得分:1)
我希望在第一个“有”之前有一个字符
您可以使用String#replaceFirst(regex)
str = str.replaceFirst("has", "e$0"));
最后一个“有”之后的一个字符,使用这样的负向前瞻:
str = str.replaceAll("has(?!.*?has)", "$0a"));
答案 3 :(得分:0)
尝试这样: -
String seq1="ihavehashasaahasabig";
String seq1Rep= seq1.replaceAll("\[ihav\]");
String seq2Rep= seq1Rep.replaceAll("\[big\]");
System.out.println(seq2Rep);
输出: - 这将仅替换字符串中的匹配单词,您将获得所需的输出。