亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式可選擇匹配文件名末尾的 3 位數字

正則表達式可選擇匹配文件名末尾的 3 位數字

C#
慕無忌1623718 2022-10-15 14:09:48
我一生都無法弄清楚如何讓這些匹配:File name without 3 digit end.jpgFile name with 3 digit 123.gifSingle 123.jpgSingle.png但不是這些:Single 1.jpgSingle 123b.gifMore words 123b.png到目前為止,我能做到的最好的就是這個表達式:^[^\s]((?!\s{2})(?!,\S).)*\b(\p{L}+|\d{3})\.\w{3}$但它無法匹配Single.png,仍然匹配Single 123b.gifand More words 123b.png。我想我明白為什么它不起作用,但我不知道如何讓它正確,我一直在努力和谷歌搜索 2 天。我的完整規則是:在文件擴展名之前可以選擇正好 3 個數字,3 個字母的文件擴展名,文件名中沒有雙空格,逗號之后但不是逗號之前有一個空格。
查看完整描述

3 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

您可以使用包含 3 個數字或一系列非數字的交替組,前面有一個單詞邊界斷言:

^.*?\b(?:\d{3}|\D+)\.\w{3}$

演示:https ://regex101.com/r/A9iSVE/3


查看完整回答
反對 回復 2022-10-15
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

為了將您的要求考慮到逗號和雙空格,一種選擇可能是使用 2 個負前瞻來斷言字符串不包含雙空格并且在逗號之前不包含空格。

\s如果要匹配空白字符而不是單個空格,則可以使用。

^(?!.*[ ]{2})(?!.* ,).*\b(?:\p{L}+|\d{3})\.\w{3}$

那將匹配

  • ^字符串的開始

  • (?!.*[ ]{2})斷言不是 2 個空格

  • (?!.* ,)斷言不是一個空格和一個逗號

  • .*\b匹配任何字符 0+ 次,后跟單詞邊界

  • (?:\p{L}+|\d{3})匹配 1+ 次字母或 3 位數字

  • \.\w{3}匹配.和 3 個單詞字符

  • $字符串結束

正則表達式演示C# 演示


查看完整回答
反對 回復 2022-10-15
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

您可以在不回溯的情況下滿足指定的規則(當前接受的答案就是這樣)。指定的規則是(為了清楚起見重新措辭):文件名必須滿足以下條件:

  • 它不得包含多個空格字符的序列。

  • 逗號后面必須有一個空格字符。

  • 文件名詞干可以有一個 3 位數的后綴。

  • 文件擴展名必須由 3 個字母組成。

為此:

^(?<prefix>[^, ]+(,? [^, ]+)*)(?<suffix>\d\d\d)?(?<extension>.\p{L}\p{L}\p{L})$

會成功的,沒有花哨的前瞻,沒有回溯。分解成碎片,你會得到:

^                  # * match start-of-text, followed by

(?<prefix>         # * a named group, consisting of

  [^,\x20]+        #   * 1 or more characters other than comma or space, followed by

  (                #   * a group, consisting of

    ,?             #     * an optional comma, followed by

    \x20           #     * a single space character, followed by

    [^,\x20]+      #     * 1 or more characters other than comma or space

  )*               #     with the whole group repeated zero or more times

)                  #   followed by

(?<suffix>         # * an optional named group (the suffix), consisting of

  \d\d\d           #   * 3 decimal digits

)?                 #   followed by

(?<extension>      # * a mandatory named group (the filename extension), consisting of

  .\p{L}\p{L}\p{L} #   * 3 letters.

)                  #   followed by

$                  # end-of-text


查看完整回答
反對 回復 2022-10-15
  • 3 回答
  • 0 關注
  • 366 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號