![](/img/trans.png)
[英]regex to start and end with character set, but with different character set in-between
[英]Regex with mixed character set and different counts for each
我正在嘗試使用正則表達式查找固定長度的數字。 問題是,在某些情況下,數字會分成由空格或破折號分隔的部分。 例如:
我想你明白我的意思。 我當前使用的正則表達式只會得到第一個數字:
(?<=^|\D)([0-9]{9})(?=$|\D)
當我在字符列表中添加空格和破折號時,如下所示:
(?<=^|\D)([0-9 -]{9})(?=$|\D)
我仍然沒有得到理想的結果,因為包含它們的“數字”超過了9個字符。 如果我使用更多字符,最終將導致很多錯誤的結果。
我需要的是一種告訴正則表達式采用數字,空格和破折號但具有以下限制的方法:
此外,如果不返回破折號和空格,那將是很好的選擇,但是那並不那么重要
我建議使用
(?<!\d)\d(?:[ -]?\d){8}(?!\d)
參見regex演示 。 要僅匹配ASCII數字, RegexOptions.ECMAScript
選項傳遞給regex構造函數。
圖案細節 :
(?<!\\d)
-如果在當前位置的左邊緊接着有一個數字符號(與(?<=^|\\D)
相同(?<!\\d)
,則負向后234.123 4567-89
匹配234.123 4567-89
( 注意 :避免匹配234.123 4567-89
用(?<!\\d\\.?)
\\d
一個數字 (?:[ -]?\\d){8}
-恰好出現8個空格或-
再加上任何數字 (?!\\d)
-如果當前位置的右側緊鄰有一個數字,則負向搜索將使匹配失敗( 注意 :為防止匹配123456789.34
,請改用(?!\\.?\\d)
)。 C#用法提取匹配項:
var results = Regex.Matches(s, @"(?<!\d)\d(?:[ -]?\d){8}(?!\d)", RegexOptions.ECMAScript)
.Cast<Match>()
.Select(m => m.Value)
.ToList();
此正則表達式有效:
(\d\s?-?){9}
它正在尋找任意數字的9組,后跟可選的空格和可選的連字符。
因此,它將與您的所有示例匹配,但也將與以下示例匹配:
這是一個簡單的正則表達式,但是如果您想排除帶有結尾空格或連字符的匹配項,則可能無法滿足您的要求。 WiktorStribiżew的答案提供了更復雜的正則表達式,可以更全面地滿足您的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.