我正在尝试验证用于重命名的模式。 用户将填写如下值:
%1% - %3%%2%
我能够与正则表达式匹配,一切正常:
[^%]*(%[\d]+%)+[^%]*
但在此之前我想验证字符串并能够找到用户犯错的时间,如:
%1% - %3%2%
%1% - %3%%2
...
无论我尝试什么,我都可以得到更正的值,但我不知道字符串是否格式良好。只能手动检查。 有正则表达式可以解决这个问题吗?或者也许我不需要正则表达式......
编辑澄清
举一个很好的例子,只需要一个重命名你的mp3文件的程序。 您可以定义%1%和曲目标题之间的映射,艺术家的%2%,...
抱歉,我的错误是只提供一个字符串。但是用户可以提交:
%1% - %3%%2%
%1%_%2%%3%
%1%%3% %2%
...
无论他想要什么。如果一切正确,我的目标是解析字符串,对我来说似乎没问题。除非我找到一个棘手的坏榜样。 但在我保存之前,我想验证并拒绝像
这样的字符串%1% - %3%%2
我的问题是找到错误的价值。我做了什么,在我看来不干净,是使用我的正则表达式,然后验证字符串中找到的“%”的总和是否是偶数,如果该总和除以2等于找到的小组总数。但我不确定它是否总是有效(不确定我的最后一句话是否清楚)
答案 0 :(得分:0)
我认为这个正则表达式是你正在努力实现的目标。
(%[\d]%) - (%[\d]%)*
答案 1 :(得分:0)
我不知道字符串是否格式良好。
此模式检查连续三个%%%
,这似乎捕获了大量失败的错误格式场景。然后,我们可以通过添加$
锚来仅要求完全形成的有效模式,只需要模式来验证* 。
(%\d%)
的有效模式是我们所寻求的:
^ # Start Anchor
(?!.+%%%) # Stop if 3 % anywhere.
%\d% # First \d
\s-\s # Dash and spaces
(%\d%)+ # Groups of numbers
$ # Stop Anchor
它适用于您提供的%1% - %3%%2%
示例,但与您提供的2个失败示例不匹配。
由于记录了此模式,因此您需要使用IgnorePatternWhiteSpace
作为正则表达式选项。否则删除所有注释并连接到一行不带空格。
当使用*
(零到多)时,它可以创建一些不实际的回溯场景,实际上可能会失败一个好的模式。真的会有零项吗?
您的示例没有显示;如果不是为什么不使用+
1对多?