簡體   English   中英

C# 正則表達式多重匹配

[英]C# Regex multiple matching

我有這個正則表達式來提取表格之外的段落

((?<=<\/w:tbl>)<w:p [^>]*>.*?<\/w:p>(?=<w:tbl>)|(?<=<\/w:tbl>)<w:p [^>]*>.*?<\/w:p>(?=<w:sectPr.*>))

問題是它讀取所有段落,就好像它們是一個段落一樣(從第一個開始標記到最后一個結束標記,沒有中間段落)。 下面是一個文本示例。 在這種情況下,它匹配一個而不是 3

</w:tr></w:tbl><w:p w:rsidR="00F24C60" w:rsidRDefault="00F24C60" w:rsidP="009D46A1"><w:pPr><w:spacing w:before="240" w:after="240"/></w:pPr><w:r><w:t></w:t></w:r></w:p><w:p w:rsidR="00F24C60" w:rsidRDefault="00F24C60" w:rsidP="009D46A1"><w:pPr><w:spacing w:before="240" w:after="240"/></w:pPr><w:r><w:t></w:t></w:r></w:p><w:p w:rsidR="00346D4D" w:rsidRPr="00AC7B53" w:rsidRDefault="00F24C60" w:rsidP="009D46A1"><w:pPr><w:spacing w:before="240" w:after="240"/></w:pPr><w:r><w:t></w:t></w:r></w:p><w:tbl><w:tblPr>

有什么幫助讓它單獨匹配每個段落(3段)?

謝謝。

我認為,你不能,因為你想在另一個標簽中創建組,但正則表達式不知道它只是從頭到尾查看字符串的結構,假設 string: eabcabce如果需要我接下來可以做的所有 abc 組(abc) ,但是我不能說我想要e之間的所有abc組。

您可以使用一些 xml 解析器。

對於這種特殊情況,您可以嘗試兩個正則表達式:

  1. 使用您的正則表達式獲取 tbl 標簽的內容在此處輸入圖像描述
  2. 使用此正則表達式從tbl內容中獲取組(<w:p [^>]*>.*?<\/w:p>) 在此處輸入圖像描述

一些鏈接:

  1. 為什么不用正則表達式解析 html (我認為您的 xml 接近html :))
  2. https://www.regextester.com/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM