很难为我的问题找到一个合适的标题。首先是一些背景信息,以备您需要时使用。
*我有一个法案,我正在尝试使用正则表达式读取信息。我将所需的信息保存到 4 个不同的表中:帐户、实用程序、位置和税费。
逻辑是每张账单只有一个帐号(帐户级别)。每个帐号可以属于多个实用程序(实用程序级别)。每个实用程序可以有多个位置(假设此问题只有 1 个位置)。并且每个地点可以有多个税收。*
所以对于找到的账单HERE 我们可以看到 4 种税(城市销售税 2.97、县销售税 1.46、州销售税 3.44 和 PPRTA 税 1.10)都属于“电力”公用事业。我们还看到 4 个公用设施(电力、燃气、水和废水)属于 1 个帐号,每个公用设施都有自己的税费。
之前,我一直在执行类似这样的简单操作,多次捕获一个捕获组中的所有税收:税收:.\$(.)
我现在想要完成的是构建一个正则表达式,仅查找给定公用事业的所有税收。同样,它必须位于具有多个匹配项的一个捕获组中。
这是迄今为止我所掌握的电力税的示例:(?:电力商业服务(?:.\n)?. ?税费:.*\$(.)(?:.\n)?.?此服务的总费用)*
如您所见,这仅收取第一笔税。我无法找到一种方法来使其涵盖与电力服务相关的“电力商业服务”和“此项服务的总费用”之间的所有税费。
谢谢!
最佳答案
在大多数语言中,您无法使用单个正则表达式来完成此操作。即使该组使用通配符,捕获组也只会产生匹配数组中的一个元素。
您需要分两步完成。首先使用正则表达式(或其他方式)提取单个公用事业的账单部分。然后在该字符串中,您可以使用正则表达式
Tax:.* \$([\d.]+)$
查找所有税费。在 PHP 中,您可以使用 preg_match_all
来查找所有匹配项;其他语言应该有类似的东西(可能涉及正则表达式的 g
修饰符)。
关于c# - 使用正则表达式在一个子字符串中查找多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231838/