使用RegEx验证重命名模式
我试图验证用于重命名的模式。 用户将填补值,如:使用RegEx验证重命名模式
%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等于找到的组的总数。但我不知道它总是有效(不知道我的最后一句话是否清楚)
我不知道,如果字符串格式与否。
这种模式进行了检查连续三个%%%
这似乎赶上了很多失败的坏格式情况。然后,我们可以通过添加$
锚来要求模式验证*仅用于良好项目,以仅要求完全形成的有效模式。
的(%\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到很多?
分享你的研究可以帮助每个人。告诉我们你试过了什么,以及它为什么不符合你的需求。这表明你已经花时间去尝试帮助自己,它使我们避免重申明显的答案,最重要的是它可以帮助你得到更具体和相关的答案!另见:[问] –
我不明白你的问题。您的正则表达式匹配(即字符串格式良好的替换模式)或不匹配(字符串不是格式良好的替换模式)。哪里有问题? –
'if(Regex.IsMatch(s,@“\ A%[0-9] +% - %[0-9] + %% [0-9] +%\ z”)){return true;}' –