结合两个常规表达

时间:2017-03-16 17:34:39

标签: java regex

我已经有一个像下面的正则表达式匹配下面给出的值。

^(.*)\s+PER\s+(.*?)(?:\sIn\s*(.+?))?(?:\s*DEAD.*)?$**
  1. 5 PER 示例
  2. 5 PER 请求
  3. 5 PER 批次
  4. 5 PER Plate
  5. 5 PER 清空
  6. 9.0 PER 样本 DEAD VOLUME 9
  7. 现在我需要这个正则表达式来检查下面给出的值

    DataField = Value(9.0 PER Sample DEAD VOLUME 9)
    

    我尝试过如下的Reg Ex

    ^(.*)\s+[=]\s+(.*?)\s+[(](.*)[)]$
    

    哪个会这样做。

    Input : DataField = Value (5 PER Sample)
    

    当前分组输出:

    Group 1: DataField
    Group 2: Value
    Group 3: 5 PER Sample
    

    现在我需要一个将现有的两个正则表达式组合在一起来对输入进行分组,如下所示(突出显示)。

    1. DataField = 价值 9.0 PER 样本 DEAD VOLUME 9)
    2. DataField = 价值 9.0 PER 示例
    3. DataField = 5 PER 清空 )< / LI>
    4. 9.0 PER 样本 DEAD VOLUME 9
    5. 5 PER 示例
    6. 5 PER 请求
    7. 5 PER 批次
    8. 5 PER Plate
    9. 5 PER 清空
    10. 有人可以帮助实现这一目标吗?

2 个答案:

答案 0 :(得分:0)

合并正则表达式:

^(?<datafield>.*)\s+[=]\s+(?<value>.*?)\s+[(](?<number>.*)\s+PER\s+(?<something>.*?)(?:\sIn\s*(?<location>.+?))?(?:\s*DEAD.*)?[)]$

现在你需要将第一部分作为可选项:

^((?<datafield>.*)\s+[=]\s+(?<value>.*?)\s+[(])?(?<number>.*)\s+PER\s+(?<something>.*?)(?:\sIn\s*(?<location>.+?))?(?:\s*DEAD.*)?[)]?$

答案 1 :(得分:0)

尝试使用以下正则表达式

(?:(\w+)\s=\s(\w+)\s\(\s)?([\d.]+(?!$))\s\w+\s(\w+ ?(?!DEAD)\w+) ?\w* ?(?:VOLUME)? ?(\w+)?

参见 regex demo / explanation