java正则表达式或其他方式在字符串和该字符串的其他部分之间查找字符串

标签 java regex string

我有一个像这样的字符串

String s = "AZERTY<em>ZA</em> QWERTY OK <em>NE</em>NO ;

我想提取 之间的字符串,并构造一个 StringBuilder,其中字符串的所有部分都按正确的顺序排列。我这样做是因为我需要识别和本地化提取的字符串,但我也需要保留整个字符串。 所有这些工作的目的是稍后在 Excel 工作表单元格中添加整个字符串,并为

之间的字符串添加字体
XSSFRichTextString xssfrt = new XSSFRichTextString(); // acts like a StringBuilder
    xssfrt .append("AZERTY");
    xssfrt .append("ZA" , font); //extract 1
    xssfrt .append(" QWERTY OK "); // keep spaces
    xssfrt .append("NE" , font); //extract 2
    xssfrt .append("NO");

我的正则表达式可以提取所需的字符串,但我不知道如何构建所有部分按正确顺序排列的 StringBuilder :/

Pattern p = Pattern.compile("\\<em>(.*?)\\</em>");
            Matcher m = p.matcher(value);
            while(m.find())
            {
                m.group(1); //extracts
            }

非常感谢

最佳答案

一个简单的解决方法是添加另一个组来匹配 <em> 之前的字符串。 :

Pattern p = Pattern.compile("(.*?)<em>(.*?)</em>");

有了它,m.group(1)em 之外的字符串,和m.group(2)就是里面的那个。

当然,这不会包括 em 之外的最后一个字符串。 (在您的示例中为 NO )。因此,您可能想记住匹配以例如结尾的最后一个索引。 int end = m.end() ,然后检索它 s.substring(end) .

关于java正则表达式或其他方式在字符串和该字符串的其他部分之间查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38011290/

相关文章:

c++ - 指向 int 类型的指针在 C++ 中不能正常协作

c - 将相等的字符串吸收到同一个指针上

java - StringBuffer 未正确打印

java - 无法使用 Eclipse 连接到 Google Cloud SQL

python - 使用 RegEx 从 Excel 工作表捕获日期

c# - 用于检查密码是否为 "8 characters including 1 uppercase letter, 1 special character, alphanumeric characters"的正则表达式

javascript - 在字符串中保持匹配正则表达式,直到没有匹配项

java - Intellij IDEA Ultimate android 布局预览无法等待构建完成

java - BlueJ 库有错误

java - GWT 单选按钮分组