使用RegEx验证重命名模式

时间:2017-05-09 15:12:56

标签: c# 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)

我认为这个正则表达式是你正在努力实现的目标。

(%[\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对多?