正则表达式:需要验证特定的字符串格式

时间:2013-09-17 10:46:59

标签: regex

我需要验证分号分隔的字符串:

示例:

;XYZ;2;200;event18=2.5;eVar12=Sale
  1. 必须有开口的分号。
  2. 'XYZ'部分是强制性的,可以是任何长度的任何单词或空白字符。
  3. '2'元素是必需元素,必须是未知长度的数字。
  4. “200”部分是强制性的,必须是未知长度的数字。
  5. 'event18 = 2.5'是可选的。如果存在,事件编号将始终为1或2位数字,并且=符号后将是未知长度的数字,并且可能包含小数点。
  6. 'eVar12 =促销'是可选的。如果存在,eVar编号将始终为1或2位数字,并且=符号后将是单词字符和空白区域的任意组合。
  7. 我现在已经开了几个小时了,但我真的是正则新手,我怀疑答案相当复杂?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

模式:

^;([\w\s]+);(\d+);(\d+)(?:;event(\d{1,2})=(\d+(?:.\d*)))?(?:;eVar(\d{1,2})=([\w\s]+))?$

JavaScript示例:

var regex = /^;([\w\s]+);(\d+);(\d+)(?:;event(\d{1,2})=(\d+(?:.\d*)))?(?:;eVar(\d{1,2})=([\w\s]+))?$/,
    input = ";XYZ;2;200;event18=2.5;eVar12=Sale";

console.log(input.match(regex));

答案 1 :(得分:1)

您可以尝试这样的事情:

^;[A-Za-z ]+(?:;[0-9]+){2}(?:;event[1-9][0-9]?=[0-9]+(?:\.[0-9]+)?)?(?:;eVar[1-9][0-9]?=[A-Za-z ]+)?$

regex101 demo

但如果你的意思是'{1}}所描述的字母,数字和下划线中的'字符',那么你可以使用:

\w

答案 2 :(得分:0)

我会使用CSV解析器来分割字段并单独检查每个字段,但作为替代方案,我们在这里:

regex并不难。它的基本知识可以带你到终点。

要匹配任何类型的字符,如第二点所示,请使用字符类中的否定分隔符,例如[^;]+

数字为\d及其适当的cuantifier,如*+{...}

对于可选点,将它们括在括号和可选元字符(?:...)?

结果是(python版本):

re.match(r';[^;]+;\d+;\d+;(?:event\d{1,2}=(?:\d+\.)?\d+)?;(?:eVar\d{1,2}=.*)?', string)

它应该有效,但如果没有,现在你已准备好适应你的需要。