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