簡體   English   中英

帶0或1的正則表達式數字-后跟數字

[英]Regex Numbers with 0 or 1 - follow by numbers

我正在嘗試匹配此字符串,但是我沒有工作。 字符串只能包含數字或帶破折號的數字,后跟另一組數字。

我的正則表達式公式:

^([0-9]*|[0-9]*\-{1}[0-9]*)$

EX:

此通行證

123

此通行證

123-123

這應該失敗,但是正在過去

123-

這應該是最簡單,最有效的方法:

^\\d+(?:-\\d+)?$

^[0-9]+(?:-[0-9]+)?$ *

  • \\d是大多數正則表達式中可用的字符集,表示[0-9] 這是一種更簡單的數字匹配方式,但是如果您更喜歡[0-9] ,則可以改用它。

  • 請注意,您的原始模式和其他人提供的作為答案的模式在連字符后包括了量詞{1} 應該避免這種情況,因為它總是多余的。 沒有量詞的單個字符等效於相同字符,后跟{1}

*編輯:Wiktor提出了我不知道的內容。 在某些正則表達式中, \\d包括所有unicode數字,而不只是數字0到9。如果這是一個問題,則可以使用模式^[0-9]+(?:-[0-9]+)?$

您需要了解正則表達式不同部分的功能。 *表示零或某些符號的任何數字,在您的情況下為數字。

如果您想在破折號后至少輸入一個數字,請使用+代替星號。

^([0-9]*|[0-9]*\-{1}[0-9]+)$

你很親密!

*量詞匹配0或多個數字。

您要查找的是與1個或多個數字匹配的+量詞。

修改您的示例:

^([0-9]*|[0-9]+\-{1}[0-9]+)$

將不匹配任何內容,單個數字或數字

^[0-9]+(-[0-9]+)*$

^[0-9]+以一個或多個數字開頭

(-[0-9]+)*零個或一個破折號,然后是長度為1或更大的數字

為了好玩,這里有一些無正則表達式的答案。 我發現它們更易於閱讀。

如果不允許-123123--123

s.Split('-').All(x => x != string.Empty && x.All(char.IsDigit));

-之間的Foreach元素,我們檢查該元素是否不為空並且僅由數字組成。

如果允許-123123--123

!s.EndsWith("-") && s.All(c => c == '-' || char.IsDigit(c));

檢查字符串s不以-結尾,並且s-和數字組成。

在線嘗試!

請注意, char.IsDigit將允許๔๕๖๗๘๙໐໑-௫௬௭௮ 如果您不希望與此匹配,請將char.IsDigit()替換為IsDigit()

public static bool IsDigit(char c) => c >= '0' && c <= '9';

暫無
暫無

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

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