在字符串中的模式之前分隔一个字符

时间:2013-10-12 11:10:49

标签: java regex string

我想将模式与字符串以及之前和之后的字符分开。

我有一个像这样的字符串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

现在我该怎么做才能解决我的问题。

4 个答案:

答案 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);

输出: - 这将仅替换字符串中的匹配单词,您将获得所需的输出。