gpt4 book ai didi

java - 从解析的 Word 文档返回文本的正则表达式

转载 作者:行者123 更新时间:2023-12-01 09:28:24 25 4
gpt4 key购买 nike

我尝试创建一个正则表达式来匹配我的 Word 文档中的部分文本。在word文档中,我有类似这样的东西{LigneDetails.Libelle},所以当我用java处理这个文件时,它会生成如下:

<w:t>{</w:t>
</w:r>
<w:proofErr w:type="spellStart" />
<w:r w:rsidRPr="009664EA">
<w:t>SOCIETE.RaisonSociale</w:t>
</w:r>
<w:proofErr w:type="spellEnd" />
<w:r w:rsidRPr="009664EA">
<w:t>}</w:t>

所以在这里我使用这个正则表达式匹配弯括号之间的文本:\\{([^\\{])*\\},这将返回:

{</w:t>
</w:r>
<w:proofErr w:type="spellStart" />
<w:r w:rsidRPr="009664EA">
<w:t>SOCIETE.RaisonSociale</w:t>
</w:r>
<w:proofErr w:type="spellEnd" />
<w:r w:rsidRPr="009664EA">
<w:t>}

现在在我的Word文档中我有这样的内容:{LigneDetails.Libelle:FAM:01}

这将生成:

<w:t>{</w:t>
</w:r>
<w:proofErr w:type="spellStart" />
<w:r w:rsidRPr="002A51DD">
<w:rPr>
<w:sz w:val="14" />
<w:szCs w:val="20" />
</w:rPr>
<w:t>LigneDetails.Libelle:FAM</w:t>
</w:r>
<w:proofErr w:type="spellEnd" />
<w:r w:rsidRPr="002A51DD">
<w:rPr>
<w:sz w:val="14" />
<w:szCs w:val="20" />
</w:rPr>
<w:t>:01}</w:t>

然后正则表达式将匹配该部分:

{</w:t>
</w:r>
<w:proofErr w:type="spellStart" />
<w:r w:rsidRPr="002A51DD">
<w:rPr>
<w:sz w:val="14" />
<w:szCs w:val="20" />
</w:rPr>
<w:t>LigneDetails.Quantite:FAM</w:t>
</w:r>
<w:proofErr w:type="spellEnd" />
<w:r w:rsidRPr="002A51DD">
<w:rPr>
<w:sz w:val="14" />
<w:szCs w:val="20" />
</w:rPr>
<w:t>:01}

到目前为止一切都很好。

现在我想匹配始终位于 : 之后的最后两个值,在我的情况下,这将是 FAM01 所以我希望这个正则表达式返回这两个值。

我该怎么做?

最佳答案

如果我们考虑到您当前的方法,您将剩下一些 {...}您有 <...> 的字符串实体或文本或 {在开始和 }最后您可以使用正则表达式删除它。然后,您需要捕获线条并用 : 分割。 ,或使用正则表达式获取 : 之后的所有非空白字符符号。

示例 Java 代码:

String str = "{</w:t>\n                  </w:r>\n                  <w:proofErr w:type=\"spellStart\" />\n                  <w:r w:rsidRPr=\"002A51DD\">\n                     <w:rPr>\n                        <w:sz w:val=\"14\" />\n                        <w:szCs w:val=\"20\" />\n                     </w:rPr>\n                     <w:t>LigneDetails.Quantite:FAM</w:t>\n                  </w:r>\n                  <w:proofErr w:type=\"spellEnd\" />\n                  <w:r w:rsidRPr=\"002A51DD\">\n                     <w:rPr>\n                        <w:sz w:val=\"14\" />\n                        <w:szCs w:val=\"20\" />\n                     </w:rPr>\n                     <w:t>:01}"; 
str = str.replaceAll("<[^<]*?>|^\\{|\\}$", "");
String[] lines = str.split("\n");
List<String> lst = new ArrayList<>();
for (String s : lines) {
if (s.contains(":"))
lst.add(s.trim().split(":")[1]);
}
System.out.println(lst);

请参阅Java demo

或者带有 :(\S+) 的版本正则表达式从剥离的字符串内容中抓取 1+ 个非空白 block :

str = str.replaceAll("<[^<]*?>|^\\{|\\}$", "");
Matcher m = Pattern.compile(":(\\S+)").matcher(str);
List<String> lst = new ArrayList<>();
while (m.find()) {
lst.add(m.group(1));
}

参见another demo

关于java - 从解析的 Word 文档返回文本的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39657883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com