2015-04-16 66 views
3

在ColdFusion中,我試圖匹配並從字符串中刪除4到6個連續的數字。該字符串看起來是這樣的:從字母數字字符串中刪除4到6位數字

ABC1234DEFGHABCDEF123456

字符串限制爲20個字符,將只包含數字和字母。數字總是連續的,並且可以在字符串的第一個字符之後的任何位置出現。只會出現一次連續的數字。如果少於4位或大於6位,我想保留它們。

因此,舉例來說,如果我有一個像這樣的字符串:

ABC1234DEFGH 

期望的結果將是ABCDEFGH

對於該字符串:

A123BCDEFGH 

期望的結果將是A123BCDEFGH

對於該字符串:

ABCDE1234567FG 

期望的結果是ABCDE1234567FG

我在這篇文章中嘗試了這個建議:Regular expression for number with length of 4, 5 or 6但它並不完全覆蓋我的要求。

的建議是:[0-9]{4,6}

這個表達式將消除任何字符串以4至6位,所以如果字符串有7個位數,它會刪除其中的6,但我希望將所有7位數字。我不知道如何創建一個正則表達式,它只會匹配正好4,5或6個連續數字的字符串。

我將非常感謝任何和所有的幫助。 (感謝易福門的格式編輯。)

回答

2
([^\d])[0-9]{4,6}([^\d]) 

這應該做它u太強勢了demo.Replace通過\1\2

https://regex101.com/r/sJ9gM7/124

+0

'12534'呢? ;) – Kasramvd

+0

感謝您的回覆。該代碼產生了ColdFusion錯誤,恐怕。但我很感激你的代碼示例中的細節。這是非常豐富的。 – geh

+0

@vks對我來說看起來是一樣的。 – geh

4

我認爲這將做的工作:

(\A|[^0-9])([0-9]{4,6})([^0-9]|$) 

它要求賠償4到6位數字的序列,2個非數字字符或字符串分隔符之間(開始/結束)。

+0

哇!謝謝你這麼快回答。我嘗試了你的表情,它保持3或更少,7位或更多的數字。但是對於4,5或6位數字,它將刪除數字前的最後一個字母字符,以及數字後面的一個字母字符,而不考慮數字的位置。例如,ABCDE123456變爲ABCD,並且ABC1234DE變爲ABE。 – geh

+0

@Kasra將被刪除 – vks

+0

@Kasra'數字總是連續的,可以在字符串的第一個字符之後的任何位置出現。只會出現一次連續的數字'dat數據無效 – vks

1

您可以使用以下方法:

<cfset mystring = REReplace(mystring, "(\D)\d{4,6}(?=\D)" , "\1") /> 

Regex 101 Demo here.

正則表達式捕獲一個非數字字符\D並將其放入捕獲組1.然後搜索4到6位數字,然後是非數字。