【问题标题】:extracting numbers from string using regex使用正则表达式从字符串中提取数字
【发布时间】:2014-03-04 15:34:50
【问题描述】:

我在下面有一个 html 代码,使用 java 我需要提取数字“25.12”以及 8、15、17 等以将它们存储在数组中。想不出正确的正则表达式语法。

<td align=center class="mazs" rowspan="2" bgcolor="#B5DA70">25.12</td>    
<td align=center class="mazs" rowspan="2" bgcolor="#B5DA70">8</td>
<td align=center class="mazs" rowspan="2" bgcolor="#B5DA70">15</td>
<td align=center class="mazs" rowspan="2" bgcolor="#B5DA70">17</td>
<td align=center class="mazs" rowspan="2" bgcolor="#B5DA70">18</td>
<td align=center class="mazs" rowspan="2" bgcolor="#B5DA70">20</td>

【问题讨论】:

  • Java 无法胜任解析 HTML 的任务。查看 JSoup (jsoup.org)

标签: java regex string match


【解决方案1】:

从文件中逐行读取,然后:

String yourValue = line.replaceAll("<[^>]*>","");

小心,使用正则表达式“解析”html 不是正确的方法。例如,如果您的 html 代码中有换行符,则正则表达式替换将失败。

【讨论】:

    【解决方案2】:

    以下是如何在 1 行中执行此操作:

    String[] numbers = str.replaceAll("<.*?>", " ").trim().split("\\s+");
    

    见live demo。

    【讨论】:

      【解决方案3】:

      如果所有行都单独出现并且没有变化,您可以使用如下非常简单的正则表达式并获取Matcher.group(1):

      >(.*)<
      

      【讨论】:

      • (\d+) == 只有数字,至少一个。包括 x.x == (\d+(\.\d+)?)
      • 为什么投反对票?操作员清楚地发布了他拥有的 html 示例。此外,我已经提到,如果样本没有变化,这将起作用。无需仅过滤掉数字或至少一个字符。答案纯粹是针对这个问题的,我没有任何地方声称它适用于其他类似情况。只是因为你可以投反对票并不赋予你这样做的权利。
      • 提到 “无需只过滤掉数字” 意味着您是在问“为什么要投反对票?” ——我没有投反对票。也就是说,您可以投票的事实确实赋予了您这样做的权利。我认为你的答案可以说是“正确的”,因为它并不完全错误,但它非常不完整......正如投票按钮所说,“这个答案没有用”。但我仍然没有投反对票。
      • 哦,我还以为是你投了反对票。现在更可笑的是有人投了反对票,但没有提到任何这样做的理由。也就是说,对于发布的问题,我的回答是完整的。我同意它可以外推到包括更多的因素,但 90% 的答案也可以。如果我问一个问题,我会寻找该问题的答案,而不是如何解决与我的问题相关的 20 个其他问题! :)
      猜你喜欢
      • 2014-10-17
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2011-05-10
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多