Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 有没有一种方法可以使用正则表达式根据特定的前导字母从字符串中捕获数字?_Regex - Fatal编程技术网

Regex 有没有一种方法可以使用正则表达式根据特定的前导字母从字符串中捕获数字?

Regex 有没有一种方法可以使用正则表达式根据特定的前导字母从字符串中捕获数字?,regex,Regex,我需要提取紧跟在“PO”或“PO”之后的4-10位数字(带空格)。我不想将PO#包含在提取的实际值中,但是我确实需要它作为在字符串中以值为目标的标准。如果数字小于4或大于10,我不希望捕获该值,否则将忽略该值 示例字符串如下所示: 供应商企业采购订单12445 或 采购订单供应商企业的发票#21412556#12445 我当前的正则表达式捕获带有“#”的PO#,并在事实发生后使用其他逻辑删除“#”,但是我的表达式也捕获发票和库存,我不希望这样做。我希望它只针对PO 当前表达式:[p][O][#]

我需要提取紧跟在“PO”或“PO”之后的4-10位数字(带空格)。我不想将PO#包含在提取的实际值中,但是我确实需要它作为在字符串中以值为目标的标准。如果数字小于4或大于10,我不希望捕获该值,否则将忽略该值

示例字符串如下所示:

供应商企业采购订单12445

采购订单供应商企业的发票#21412556#12445

我当前的正则表达式捕获带有“#”的PO#,并在事实发生后使用其他逻辑删除“#”,但是我的表达式也捕获发票和库存,我不希望这样做。我希望它只针对PO

当前表达式:[p][O][#]\s*[0-9]{3,9}\d+\w


任何帮助都将不胜感激

您可以使用捕获组并使用
[0-9]{4,10}
重复匹配数字4-10次

请注意,
[p][O][#]
与PO相同#

  • \bPO#\s*
    Match PO#前面有一个单词边界,并匹配0+空格字符
  • Capturegroup 1
    • [0-9]{4,10}
      匹配4-10位数字
  • )\b
    关闭组,然后加上单词边界,以防止匹配成为较大单词的一部分

您可以使用捕获组,并使用
[0-9]{4,10}
重复匹配数字4-10次

请注意,
[p][O][#]
与PO相同#

  • \bPO#\s*
    Match PO#前面有一个单词边界,并匹配0+空格字符
  • Capturegroup 1
    • [0-9]{4,10}
      匹配4-10位数字
  • )\b
    关闭组,然后加上单词边界,以防止匹配成为较大单词的一部分

如果您只需要数字,您可以使用
\b(?如果您只需要数字,您可以使用
\b(?如果
PCRE
可用,那么:
PO#\s*\K\d{4,10}(?=\d |$)

  • PO#\s*
    匹配前导子字符串“PO#”,后跟0个或更多空格
  • \K
    重置匹配的起始位置,并用作正向(零长度)查找

  • \d{4,10}
    匹配一个4的数字序列如果
    PCRE
    可用,那么:
    PO#\s*\K\d{4,10}(?=\d |$)

    • PO#\s*
      匹配前导子字符串“PO#”,后跟0个或更多空格
    • \K
      重置匹配的起始位置,并用作正向(零长度)查找

    • \d{4,10}
      匹配一个4位数的序列“我不想将PO#与提取的实际值包括在一起,但是我确实需要它作为标准来定位字符串中的值”=>您是否需要捕获“PO#”只需要数字?使用lookbehind断言。
      (?@MaxXapi correct,我只需要数字,包括Alexander的反馈后,它就像一个符咒。非常感谢你们两位!!!也让我意识到我还有很多东西要学。“我不想将PO包含在提取的实际值中,但我确实需要它作为在字符串中定位值的标准”=>您是否需要捕获“PO”#?仅捕获数字?使用查找断言。
      (?@MaxXapi correct,我只需要这些数字,在你把Alexander的反馈包括进来之后,它就像一个符咒。非常感谢你们两位!!!也让我意识到我还有很多东西要学。这对更正非常有效。谢谢!!!这对更正非常有效。谢谢!!!
      
      \bPO#\s*([0-9]{4,10})\b