2017-05-09 93 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到很多?