[英]Find certain colons in string using Regex
我正在嘗試在給定字符串中搜索冒號,以便根據以下條件在冒號處拆分字符串以進行預處理
A Book: Chapter 1
或A Book:Chapter 1
:( or ): or:/ or:-)
等16:00
等,則不匹配我想出了一個正則表達式
(\:)(?=\w)|(?<=\w)(\:)
它滿足條件 2 和 3,但在條件 3 上仍然失敗,因為它與時間字符串表示中的冒號相匹配。 我該如何解決?
編輯:如果可能的話,它必須在一個正則表達式語句中
您可以使用
(:\b|\b:)(?!(?:(?<=\b\d:)|(?<=\b\d{2}:))\d{1,2}\b)
請參閱正則表達式演示。 詳情:
(:\b|\b:)
- 第 1 組:a :
前面或后面有一個單詞 char(??(:?(:<=\b\d?)|(:<=\b\d{2},))\d{1,2}\b)
- 不應有一位或兩位數字緊跟在:
之后(后跟單詞邊界)如果:
前面有一個或兩個數字(前面有單詞邊界)。 注意:\b
等於:(?=\w)
並且\b:
等於(?<=\w):
。
如果您需要獲得與原始模式相同的捕獲組,請將(:\b|\b:)
替換為(?:(:)\b|\b(:))
。
更靈活的解決方案
請注意,可以使用更簡單的模式來排除匹配項,該模式匹配並捕獲您需要的內容,只匹配您不需要的內容。 這被稱為“有史以來最好的正則表達式技巧” 。 所以,你可以使用像這樣的正則表達式
8:|:[PD]|\d+(?::\d+)+|(:\b|\b:)
將匹配8:
、 :P
、 :D
、一個或多個數字,然后是一個或多個:
序列和一個或多個數字,或者將匹配並捕獲到第 1 組 a :
前面或后面有單詞的字符字符。 您需要做的就是檢查第 1 組是否匹配,並在代碼中實現所需的提取/替換邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.