簡體   English   中英

如何使用正則表達式從字符串中獲取精確的8位數字?

[英]How to get exact 8 digit from string using regular expression?

我的要求是從給出者字符串中獲取確切的8位數字。

讓我給你舉個例子。

  1. 000012345678000 :這是不允許的,因為它超過8位數字。 因此,不應提取“ 12345678”

  2. 0000 12345678 000 :允許這樣做,因為8位數字是分開的。

  3. 000012345678。ABCKSAKU :允許。
  4. 0000.12345678.ABCKSAKU :允許。
  5. 0000/12345678 / ABCKSAKU :允許。

簡而言之,允許使用單獨的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM