[英]C# Matching letters, numbers and special character in regex
我有以下正則Regex
:
[A-Z]{2}[0-9]{4}
並且它與這樣的字符串完全匹配: AB1234
。 但是我必須改進此正則Regex
以使其符合以下特定規則:
AB1234##AB1234
)之間必須只有兩個尖號(##) AB1234##AB1234##AB1234##AB1234##AB1234##AB1234##AB1234##AB1234
) AB1234##AB1234##AB1234
如果我使用第二個項目符號點的示例字符串,則我的Regex
將與該模式匹配,但是在這種情況下,它不能驗證每個組之間的字符。
誰能幫助我改進此正則表達式?
嘗試這個:
^([A-Z]{2}[0-9]{4}##){0,7}([A-Z]{2}[0-9]{4})$
([A-Z]{2}[0-9]{4}##){0,7}([A-Z]{2}[0-9]{4})
您可以將Regex
和LINQ
結合使用,然后使用如下擴展方法:
public static bool Validate(this string source)
{
string pattern = "[A-Z]{2}[0-9]{4}";
return !source.StartsWith("##") &&
!source.EndsWith("##") &&
source.Split(new[] {"##"}, StringSplitOptions.RemoveEmptyEntries)
.All(x => Regex.IsMatch(x, pattern));
}
用法:
bool t1 = "AB1234##AB1234".Validate(); // true
bool t2 = "AB1234##AB1234##AB1234".Validate(); // true
bool t3 = "AB1234##AB1234##" // false
^(?:[A-Z]{2}[0-9]{4})(?:##(?:[A-Z]{2}[0-9]{4})){0,7}$
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^
(1) (2) (3)
##
並重復第一個匹配項。 結果:( *
表示匹配)
* AB1234
AB1234x
* AB1234##AB1234
* AB1234##AB1234##AB1234
AB1234##AB1234##AB1234x
觀看現場演示 。
注意:此答案與該其他答案非常相似。 但是,這里的答案始於假設存在至少一個 AB1234
序列。 它然后允許它是由跟隨零至7倍的可能性 ##AB1234
。 最后,兩個正則表達式都很好。 這取決於個人喜好。
還要注意,我使用了非捕獲組(?:...)
來避免創建在這種情況下不需要的捕獲組的不必要的開銷。 (捕獲組也稱為反向引用。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.