我需要验证分号分隔的字符串:
示例:
;XYZ;2;200;event18=2.5;eVar12=Sale
我现在已经开了几个小时了,但我真的是正则新手,我怀疑答案相当复杂?任何帮助将不胜感激。
答案 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 ]+)?$
但如果你的意思是'{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)
它应该有效,但如果没有,现在你已准备好适应你的需要。