首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以使用Regex来根据特定的前导字母从字符串中捕获数字?

是否有一种方法可以使用Regex来根据特定的前导字母从字符串中捕获数字?
EN

Stack Overflow用户
提问于 2020-10-20 06:21:00
回答 3查看 58关注 0票数 1

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

示例字符串如下所示:

面向供应商企业的PO#12445

Invoice# 21412556面向供应商企业的PO# 12445

我当前的RegEX表达式用'#‘捕获PO#,并且在事实之后使用额外的逻辑来删除'#',但是我的表达式也捕获了Invoice#和Inv#,这是我不希望它做的。我希望它只针对PO#。

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

任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-20 06:36:29

如果只需要数字,则可以使用\b(?<=PO#)\s?(\d{4,10})\b,并:

  • (?<=PO#):正向后看,请确保此模式在所需模式之前存在(PO后面跟着#)
  • \s?:0或1个空白
  • (\d{4,10}):介于4到10位之间
  • \b:避免ie的词界。11位模式匹配的10位头位或匹配的“SPO#”

编辑: Alexander说得对,看后面的东西必须是固定的宽度,所以\b(?<=PO#)\s?(\d{4,10})\b是更好的https://regex101.com/r/1KBQd1/5

编辑:添加单词边界

票数 0
EN

Stack Overflow用户

发布于 2020-10-20 06:35:02

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

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

代码语言:javascript
复制
\bPO#\s*([0-9]{4,10})\b
  • \bPO#\s*匹配PO#前面有一个单词边界,并匹配0+空格字符
  • ( Capture group 1
    • [0-9]{4,10}匹配4-10位数

  • )\b关闭组后面跟着一个单词边界,以防止匹配成为较大单词的一部分。

Regex演示

票数 0
EN

Stack Overflow用户

发布于 2020-10-20 07:05:11

如果PCRE可用,不如:PO#\s*\K\d{4,10}(?=\D|$)

  • PO#\s*匹配前面的子字符串"PO#“,后面跟着0或更多的空格。
  • \K重置匹配的起始位置,并作为正(零长度)后视。
  • \d{4,10}匹配4 <=长度<= 10的数字序列。
  • (?=\D|$)是用于匹配非数字字符或字符串末尾的正前瞻。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64439533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档