-1

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

我有一个像 ihavehashasaahasabig 这样的字符串,它的模式为 3 个“has”,我想在第一个“has”之前有一个字符,在最后一个“has”之后有一个字符。

输出应该是这样的。

呸呸呸呸

但是当我使用这段代码时

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

4 回答 4

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

于 2013-10-12T11:14:24.027 回答
1

您可以使用贪心量词:

Pattern pat =Pattern.compile(".has.*has.");

使用贪心量词,中间的has被忽略。

于 2013-10-12T11:16:19.667 回答
1

我想在第一个“有”之前有一个字符

您可以使用String#replaceFirst(regex)

str = str.replaceFirst("has", "e$0"));

最后一个“有”之后的一个字符,使用负前瞻,如下所示:

str = str.replaceAll("has(?!.*?has)", "$0a"));
于 2013-10-12T11:17:32.027 回答
0

也可以这样尝试:-

String seq1="ihavehashasaahasabig";
String seq1Rep= seq1.replaceAll("\[ihav\]");
String seq2Rep= seq1Rep.replaceAll("\[big\]");
System.out.println(seq2Rep);

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

于 2013-10-12T11:39:34.460 回答