我正在尝试构建一个正则表达式来匹配像
这样的字符串示例:
3232asdfADFF/ew323fdffADF 4243dsafAFDF 232 (total 42)
<----p1---->/<---p2-----> <----p3----> P4
我可以成功匹配到p3
但无法匹配最后一部分,p4
p4
本质上是数字字符串,长度为0到3(绝对或最大3)。
我正在使用:
[0-9A-Za-z]{2,12}/[0-9A-Za-z]{3,12} [0-9A-Za-z]{0,12}\\b \\d{0,3}$
但我面临的问题是,如果我从输入中完全删除p4
,它就会失败。
即使数字也能成功。
答案 0 :(得分:1)
这应该适合你,我想:
[0-9A-Za-z]{2,12}/[0-9A-Za-z]{3,12}(?: [0-9A-Za-z]{1,12})?(?: \\d{1,3})?$
答案 1 :(得分:0)
当然,如果没有空间,它就会失败。你应该有类似( \d{0,3})?$
的东西。
答案 2 :(得分:0)
正如我在评论中提到的,不确定模式中可能存在/可能不存在的内容。但是,最好的猜测努力,这就是我想出的:
\w{3,12}\/\w{3,12} (?:\w{0,12} )?\d{0,3}
这将匹配(total 42)
之前的所有内容。如果您还需要包含它,可以添加:
(?: \(\w+ \d+\))?
到模式的结尾。再一次,尽力而为基于我所看到的和我猜的应该是结果。如果这不是你想要的,请给我留言,我可以调整它。
(另外,为了篇幅起见,我将[0-9a-zA-Z]
替换为\w
。虽然它不是直接的一对一替换,但它很接近。如果你需要它明确地使用上一个模式,将\w
替换回原始类。)