2017-06-22 35 views
1

目標:在較大的字符串內爲固定長度字符串建立廣義正則表達式。該字符串具有指定的填充字符,後跟一個增量的整數計數器。理想情況下,有一些方法可以說:「我希望這個團隊長度爲10,並且只包含一種類型的角色,然後是不同的角色。」具有填充的特定長度正則表達式

我試圖可變數據內匹配這個(可以是數字可能是字母可能是符號): 的填充字符+數字加起來到指定長度,這裏將是5

這些都是允許的填充+數字組合。

$$$$1 
$$$12 
$$123 
$1234 

下面是一個例子:

<variable-data> <padding-characters> <numbers> <variable-data> 
............... .................... ddddddddd ............... 
(where periods are any characters and 'd' is any digit) 

Example Data: 
ABC    $$$$     1   [email protected] 

Example Regex: 
ABC\$*\d+\[email protected] 

Match: 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

No Match: 
[email protected] 
[email protected] 

Regex101

我試了一下:

ABC(?=.{5})\$*\d+\[email protected] 

這不工作,因爲它仍然匹配到下一個數字因爲\d+。我想另一件事是

ABC(?=[\$\d]{5}[^\$\d])(\$*\d+)\[email protected] 

旨在停止尋找它遇到一個非數字或非$之後,但是這不是有益的,因爲該字符串的下一部分可以用一個$或數字開頭。

最簡單的正則表達式來解決這個問題:

(\$\$\$\$\d|\$\$\$\d\d|\$\$\d\d\d|\$\d\d\d\d|\d\d\d\d\d) 

但我想使這個更廣義的,並且可以有填充量可變E.G.

$$$$$$$$$1 
$$$$$$$$12 
... 
+0

你的意思是整理*變量數據*不會以數字開始? – revo

+0

@revo我不確定在運行前會有什麼。它們都是用戶定義的。他們可以肯定是數字。 –

+0

所以這樣的輸入字符串* ABC $$$$ 11!@ *的可能性存在,它應該匹配? – revo

回答

2
ABC(?=.{5}\[email protected])\$*\d+\[email protected] 

這是非常相似,你的第一次嘗試,但與先行還包含終止字符串的微小差異。這給了它一些東西來錨定,以確保正則表達式不匹配更多。

+0

謝謝,我想要的東西,不依賴於下一個標記,但。這似乎回答了我原來的問題。 –