2017-05-09 63 views
1

我试图验证用于重命名的模式。 用户将填补值,如:使用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等于找到的组的总数。但我不知道它总是有效(不知道我的最后一句话是否清楚)

+2

分享你的研究可以帮助每个人。告诉我们你试过了什么,以及它为什么不符合你的需求。这表明你已经花时间去尝试帮助自己,它使我们避免重申明显的答案,最重要的是它可以帮助你得到更具体和相关的答案!另见:[问] –

+0

我不明白你的问题。您的正则表达式匹配(即字符串格式良好的替换模式)或不匹配(字符串不是格式良好的替换模式)。哪里有问题? –

+0

'if(Regex.IsMatch(s,@“\ A%[0-9] +% - %[0-9] + %% [0-9] +%\ z”)){return true;}' –

回答

0

我认为这个正则表达式就是你要完成的。

(%[\d]%) - (%[\d]%)* 
+0

OP想要符合表达式的行,而不是那些行。 – Izzy

+1

@Izzy,但不符合的行只是那些不符合上述模式的行。 –

+0

现在我也有点困惑。我认为我的表情就是他想要的,但是现在我想知道他是否只希望在“ - ”之后有两%[/ d]%。我们需要从OP得到澄清,然后才能继续。 – ShaneNal

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到很多?