Java 字符和行尾的模式匹配

Java 字符和行尾的模式匹配,java,regex,pattern-matching,Java,Regex,Pattern Matching,我有一个字符串,格式如下: I am extracting this Hello:A;B;C, also Hello:D;E;F 如何提取字符串A;BC和D;EF 我写了下面要提取的代码片段,但无法提取最后匹配的字符D;EF 美元意味着线的尽头 因此,这应该是可行的: Pattern pattern = Pattern.compile("(?<=Hello:).*?(?=,|$)"); 因此,您可以向前看,看是否有逗号或行尾 .试试这个: String test = "I am ext

我有一个字符串,格式如下:

I am extracting this Hello:A;B;C, also Hello:D;E;F
如何提取字符串A;BC和D;EF

我写了下面要提取的代码片段,但无法提取最后匹配的字符D;EF

美元意味着线的尽头

因此,这应该是可行的:

Pattern pattern = Pattern.compile("(?<=Hello:).*?(?=,|$)");
因此,您可以向前看,看是否有逗号或行尾

.

试试这个:

String test = "I am extracting this Hello:Word;AnotherWord;YetAnotherWord, also Hello:D;E;F";
// any word optionally followed by ";" three times, the whole thing followed by either two non-word characters or EOL
Pattern pattern = Pattern.compile("(\\w+;?){3}(?=\\W{2,}|$)");
Matcher matcher = pattern.matcher(test);
while (matcher.find()) {
    System.out.println(matcher.group());
}
输出:

Word;AnotherWord;YetAnotherWord
D;E;F

假设您的意思是省略字符串中的某些模式:

    String s = "I am extracting this Hello:A;B;C, also Hello:D;E;F" ;
    ArrayList<String> tokens = new ArrayList<String>();

    tokens.add( "A;B;C" );
    tokens.add( "D;E;F" );

    for( String tok : tokens )
    {
        if( s.contains( tok ) )
        {
            s = s.replace( tok, "");
        }
    }
    System.out.println( s );

感谢杜克林的评论,但这不起作用。事实上,它连一个字母都不匹配;B是的,我正在寻找,或者是行尾。Mena,实际上,ABC可以是任何其他普通字符。“这些也可以是文字。”布林纳尔说得对。请参阅我的编辑。如果alnums不够,你也可以使用Unicode分类。我认为你有3个匹配项。如果我的字符串是string s=我正在提取这个Hello:Word;另一个词;是的另一个词,是的另一个词也你好:D;E如果它不起作用。而且它与Hello不匹配。我想让它匹配特定的标签。谢谢你的回复。
    String s = "I am extracting this Hello:A;B;C, also Hello:D;E;F" ;
    ArrayList<String> tokens = new ArrayList<String>();

    tokens.add( "A;B;C" );
    tokens.add( "D;E;F" );

    for( String tok : tokens )
    {
        if( s.contains( tok ) )
        {
            s = s.replace( tok, "");
        }
    }
    System.out.println( s );