[英]How to get exact 8 digit from string using regular expression?
我的要求是從給出者字符串中獲取確切的8位數字。
讓我給你舉個例子。
000012345678000 :這是不允許的,因為它超過8位數字。 因此,不應提取“ 12345678”
0000 12345678 000 :允許這樣做,因為8位數字是分開的。
簡而言之,允許使用單獨的8位數字。 是不得在任何數字內。
我努力了。
\\ s {1,} \\ d {8} \\ s {1,},但僅允許8位數字,且兩邊都留有空格。
你能幫我么。 提前致謝
\\s{1,}\\d{8}\\s{1,}
模式確實僅在空白之間匹配,因為\\s{1,}
(等於\\s+
)匹配1個或多個空白字符。
您可以使用環視相匹配的數字序列,這些數字不包含在其他數字中:
(?<!\d)\d{8}(?!\d)
圖案細節
(?<!\\d)
-如果在當前位置的左側緊跟着一個數字,則向后的否定性查找將使匹配失敗 \\d{8}
-8位數字 (?!\\d)
-如果當前位置的右側緊鄰有一個數字,則負前瞻將使匹配失敗。 在C#中,使用以下代碼獲取所有匹配項:
var results = Regex.Matches(s, @"(?<!\d)\d{8}(?!\d)", RegexOptions.ECMAScript)
.Cast<Match>()
.Select(m => m.Value)
.ToList();
請注意, RegexOptions.ECMAScript
選項將使\\d
僅匹配ASCII數字。
單詞邊界注釋 :您可以考慮使用單詞邊界\\b
而不是環顧四周,但是有一個陷阱。 如果您需要從_12345678_
字符串中提取8位數字,則不能使用\\b\\d{8}\\b
模式。 如果您希望此匹配失敗,則可以使用\\b\\d{8}\\b
。
您應按以下方式使用單詞邊界( \\b
):
\b\d{8}\b
這是您想要的正則表達式:
.*([. \/])+([1-9]{8})([. \/])+.*
在數字應該是一個或多個空格,反斜杠和點之前也是如此,數字也不應為零,以及在空格,點和反斜杠之后和之前以及之后的任何東西都可以
我認為檢查左右是否為最后一個非數字字符就足夠了,並使其可選,因為“ 12345678”應表示周圍也沒有數字:
(\\D)?\\d{8}(\\D)?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.