0

我正在使用正则表达式,大型 XML 文件的 C# 风格。我通过不止一个案例注意到,一些应该在一种“大字符串”上运行的模式根本不匹配。例如,以下字符串:

<p>
<?tex xxxxxx ?>
</p>
  <table-wrap position="float">
 <table>
 <tbody>
 <tr>
<td colspan="2">
<hr/>
</td>
</tr>
<tr>
<td>
<nlm.tabular>Patient</nlm.tabular>
</td>
<td>
<nlm.tabular>Patient Waiting Time</nlm.tabular>
</td>
</tr>
<tr><td
<nlm.tabular>1st patient in block <italic>B</italic>
<subscript>1</subscript>
</nlm.tabular>
</td>
<td>
<nlm.tabular>0</nlm.tabular>
</td>
</tr><tr>
<td>
<nlm.tabular>2nd patient in block <italic>B</italic><subscript>1</subscript>
</nlm.tabular>
</td>
<td>
<nlm.tabular>
<mml:math display="block">
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn></mml:mrow>
</mml:msubsup>
</mml:math></nlm.tabular>
</td>
</tr>
<tr>
<td>
<nlm.tabular>3rd patient in block <italic>B</italic>
<subscript>1</subscript>
</nlm.tabular>
</td>
<td>
<nlm.tabular<mml:math display="block">
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
<mml:mrow><mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn></mml:mrow></mml:msubsup></mml:math>
</nlm.tabular>
<?tex llllll?>
</td></tr>
<tr>
<td>
<nlm.tabular/>
</td>
<td>
<nlm.tabular/>
</td>
</tr>
<tr>
<td>
<nlm.tabular>
<mml:math display="block">
<mml:mo>⋮&lt;/mml:mo>
</mml:math>
</nlm.tabular>
</td>
<td>
<nlm.tabular>
<mml:math display="block">
<mml:mo>⋮&lt;/mml:mo></mml:math>
</nlm.tabular>
<?tex cccccccc?>
</td></tr>
<tr>
<td>
<nlm.tabular>
<italic>n</italic>
<subscript>1</subscript>th patient in block <italic>B</italic>
<subscript>1</subscript></nlm.tabular>
</td><td>
<nlm.tabular>
<mml:math display="block">
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow><mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
</mml:msubsup><mml:mo>+</mml:mo>
<mml:mo>…&lt;/mml:mo>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:math>
</nlm.tabular>
</td>
</tr>
<tr>
<td colspan="2">
<hr/>
</td>
</tr>
<tr>
<td>
<nlm.tabular>vvvvvvvvvvvvvv</nlm.tabular>
</td>
<td>
<nlm.tabular>2222222222</nlm.tabular>
</td>
</tr>
<tr>
<td>
<nlm.tabular>Patient</nlm.tabular>
</td>
<td>
<nlm.tabular>Patient Waiting Time</nlm.tabular>
</td>
</tr>
<tr>
<td>
<nlm.tabular>1st patient in block <italic>B</italic>
<subscript>2</subscript>
</nlm.tabular>
</td>
<td>
<nlm.paragraph>0&lt;?tex type="longcontinued-tabular" cols="xxx" width="yyy"?&gt;</nlm.paragraph>
</td>
</tr>
<tr>
<td>
<nlm.tabular>2nd patient in block <italic>B</italic>
<subscript>2</subscript>
</nlm.tabular>
</td>
<td>
<nlm.tabular>
<mml:math display="block">
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">2</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:math>
</nlm.tabular></td>
</tr>
<tr>
<td>
<nlm.tabular>3rd patient in block<italic> B</italic>
<subscript>b</subscript>
</nlm.tabular>
</td>
<td>
<nlm.tabular>
<mml:math display="block">
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow><mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn></mml:mrow><mml:mrow>
<mml:mi>b</mml:mi></mml:mrow></mml:msubsup><mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</nlm.tabular>
</td>
</tr>
<tr>
<td rowspan="2">
<nlm.tabular>
<mml:math display="block">
<mml:mo>⋮&lt;/mml:mo>
</mml:math>
</nlm.tabular>
<nlm.tabular>
<italic>n</italic>
<subscript>b</subscript>th patient in block<italic> B</italic>
<subscript>b</subscript>
</nlm.tabular>
</td>
<td>
<nlm.tabular>
<mml:math display="block"><mml:mo>⋮&lt;/mml:mo>
</mml:math>
</nlm.tabular>
</td>
</tr>
<tr>
<td colspan="0">
<nlm.tabular/>
</td>
<td>
<nlm.tabular>
<mml:math display="block">
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn fontstyle="italic">2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:mo>…&lt;/mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>+</mml:mo>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn fontstyle="italic">1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</nlm.tabular>
</td>
</tr>
<tr>
<td colspan="2"><hr/>
</td>
</tr>
</tbody>
</table>
</table-wrap>

我试图将它与:

MatchCollection mc = Regex.Matches(input , @"\<p\>\<\?tex\s*.*?\?\>\s*\<\/p\>\s*\<table\-wrap\s*.*?\>.*?\<\/table\-wrap\>);

简单地说,这根本没有任何匹配。如此大小的字符串也会发生同样的情况。

那么问题出在哪里呢?

4

1 回答 1

1

使用这个正则表达式<p>\s*<\?tex\s*.*?\?\>\s*\<\/p\>\s*\<table\-wrap\s*.*?\>.*?\<\/table\-wrap\> 你丢失了标签之间的空格

于 2012-09-19T08:59:25.843 回答