簡體   English   中英

C#RegEx匹配特定的字符串

[英]C# RegEx to match specific strings

我需要匹配(使用正則表達式)字符串,如下所示:

必需:custodian_ {number 1-9} _ {fieldType txt或ssn}可選:_ {fieldLength 1-999}

因此,例如:custodian_1_ssn_1有效custodian_1_ssn_1_255有效

保管人或保管人_或保管人_1或保管人_1_或保管人_1_ssn或保管人_1_ssn_或保管人_1_ssn_1_無效

目前,我正在與此:

(?:custodian|signer)_[1-9]?[0-9]_(?:txt|ssn)_[1-9][0-9]?(_[1-9]?[0-9]?[0-9]?)?

正則表達式和api正在工作:custodian_1_txt_1 custodian_1_ssn_1 custodian_1_txt_1_25 5 <----與最后一個“ 5”不匹配

有什么想法嗎?

您可以使用模式:

^custodian(?:_[a-z0-9]+)+$
  • ^行首的位置。
  • custodian匹配文字串custodian
  • (?:_[a-z0-9]+)+非捕獲組。 _多個序列,后跟字母數字。
  • $行尾位置。

您可以在此處檢查正確的匹配項。

顯然,您可以修改模式以在非捕獲組中添加子字符串signer ,如下所示:

^(?:custodian|signer)(?:_[a-z0-9]+)+$

我建議使用\\d而不是您的數字,這是我的代碼嘗試:-

(?:custodian|signer)_[1-9]?[0-9]_(?:txt|ssn)_[1-9][0-9]?(_[1-9]?\d*)?

我只是在您的模式末尾添加了一個\\d值,以匹配所有匹配末尾的數字。

您可以使用錨點來聲明字符串的開始^和結束$ ,對於最后一部分,至少使前1-9不是可選的,否則它將匹配並在末尾加下划線:

^(?:custodian|signer)_[1-9]?[0-9]_(?:txt|ssn)_[1-9][0-9]?(_[1-9][0-9]?[0-9]?)?$

如果您僅對最后一位數字感興趣,那么此超級通用正則表達式將執行以下操作:

(?:.+)_(\d+)

如果確實需要匹配整個字符串,則可以這樣做:

^(?:custodian|signer)_\d+_(?:txt|ssn)(?:_\d+)?_(\d+)$

暫無
暫無

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

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