图案不匹配大字符串(c#flavor)

时间:2012-09-19 08:55:45

标签: c# xml regex

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

<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>⋮</mml:mo>
</mml:math>
</nlm.tabular>
</td>
<td>
<nlm.tabular>
<mml:math display="block">
<mml:mo>⋮</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>…</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>⋮</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>⋮</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>…</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\>);

根本就没有任何匹配。对于如此大小的字符串也是如此。

那么问题出在哪里?

1 个答案:

答案 0 :(得分:1)

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