【问题标题】:Regex to match a rather complex string正则表达式匹配一个相当复杂的字符串
【发布时间】:2017-07-07 23:00:52
【问题描述】:

任何可能在此数据上找到模式的正则表达式专家,我正在寻找一个完全匹配的模式,包括空格、逗号和破折号。这是我需要匹配的样本数据:


单词单词,字母数字-PRT-word-number

word word,字母数字-PRT-number


-word:任意大小的单词

-字母数字:3 个字母和最多 2 个数字,所以 XXX# 或 XXX##

-number:最多 3 位数字,所以 # 或 ## 或 ###

-PRT: 是这里唯一的静态值

注意:除了它们所在的空格、逗号和破折号之外,没有其他标点符号。


到目前为止,有一些接近它的东西,但相当笨重,它并没有涵盖所有基础,我在这里构建它:http://buildregex.com/ 使用他们的逻辑,它有点工作:

/(?:[^_\ ]+)(?:\ )(?:[^_\ ]+), (?:[^_\ ]+)-PRT-(?:[^_\ ]*)/gi

如果有任何人可以帮助完善这一点,将受到欢迎

https://regex101.com/r/8cc52u/2

非常感谢

【问题讨论】:

  • 你不需要专家,但What does this regex mean?
  • 对你来说是什么词?只有来自[a-zA-Z] 或带有变音符号éèçàÉÀÖù... 的字母?是否允许破折号?还是撇号?
  • @revo 虽然作为参考相当有用...那里的数据对于初学者来说很麻烦。我完全同意 givethecodez 的问题……但并不是每个人都在寻找它。我以前曾尝试过自己的知识,现在感谢答案,我能够拼凑一些概念来做其他正则表达式。感谢您在那里提供协助,我看到了您对所选答案的评论。干杯

标签: javascript regex


【解决方案1】:

这是一种方法:

/^[a-z]+\s[a-z]+,\s[a-z]{3}\d{1,2}-prt-([a-z]+-){0,1}\d{1,3}$/gi
  • ^: 行首
  • [a-z]+: 一个或多个字母
  • \s: 任意空格符
  • [a-z]+:一个或多个字母
  • ,: ,
  • \s: 任意空格符
  • [a-z]{3}:三个字母
  • \d{1,2}:一位或两位数
  • -prt-:-prt-
  • ([a-z]+-){0,1}:一个或多个字母后跟 -、零或一次
  • \d{1,3}:一位、两位或三位数字
  • $: 行尾

示例:https://regex101.com/r/BhS8kM/5

或者,如suggested by revo

/^[a-z]+ [a-z]+, [a-z]{3}\d{1,2}-prt-([a-z]+-)?\d{1,3}$/gi

例如:https://regex101.com/r/BhS8kM/7

【讨论】:

  • 这也匹配word word, wrd12-prt--5
  • @revo 不错,谢谢!我已经更新了答案以涵盖该场景。
  • GJ 仅供参考,所有{0,1} 范围都可以转换为具有相同含义的?。我也相信\s 不适合捕捉Space 0x20 不严格。单独使用空格字符。
  • 这简直是天才,不仅你的解释帮助我理解并做另一个完整的正则表达式......永远感激。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多