簡體   English   中英

正則表達式用於文本塊中的前8位數字,但不包括數字大於8位的數字

[英]Regex for the first 8-digit number in a block of text excluding numbers with > 8 digits

我需要檢查電子郵件中的某個文本塊,以找到正好8位數長的數字,並且只返回第一個匹配項。

這是我的測試用例:

Test123456789-應該失敗,因為9位數

Test23456789Test-通過

Test23456789測試-通過

13456780測試-通過

Test0123456-因7位數字而失敗

電子郵件中的其他文字:我已附上您要求的信息。 如果你有任何問題,請告訴我們。 -電子郵件中的多余文本無關緊要。

我試過了:
.*(\\d{8}).* -匹配多個
.*?(\\d{8}).* -僅匹配一次,但也匹配9位數字
.*(?<!\\d)\\d{8}(?!\\d).* -我在另一個答案中找到了,但是它返回了電子郵件中的所有文本,我只想要8位數字。

感謝您的指導!

您可以使用以下正則表達式:

(?!.*\d{9})\d{8}

首先使用9位數字的negative look ahead前瞻。 然后,它匹配8 digits

如果是7位或9位數字,則此操作將失敗。

對您發布的最新版本進行一些細微調整:

試試: .*(?<!\\d)(\\d{8})(?!\\d).*

演示版

您可以使用以下命令找到第一個匹配項:

^[\\s\\S]+?(?<!\\d)(\\d{8})(?!\\d)

這將匹配:

  • ^字符串的開始
  • [\\s\\S]+? 匹配任何字符非貪婪
  • (?<!\\d)否定向后檢查左側是否不是數字
  • (\\d{8})分組捕獲8位數字
  • (?!\\d)負向檢查以檢查右邊的數字不是數字

或者啟用使點與您的工具或語言中的換行符匹配,或在正則表達式前加上(?s)並替換[\\s\\S]+? .+?

您的值在第一個捕獲組中。

正則表達式演示

正如其他人所說,您可以使用負向前看和負向后看,並記住不要包含g標志,否則您將匹配每次出現的模式:

(?<!\\d)\\d{8}(?!\\d)

演示(全球比賽)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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