簡體   English   中英

使用正則表達式在字符串中查找某些冒號

[英]Find certain colons in string using Regex

我正在嘗試在給定字符串中搜索冒號,以便根據以下條件在冒號處拆分字符串以進行預處理

  1. 前面或后面跟一個詞,例如A Book: Chapter 1A Book:Chapter 1
  2. 如果它是表情符號的一部分,則不匹配,即:( or ): or:/ or:-)
  3. 如果它是給定時間的一部分,即16:00等,則不匹配

我想出了一個正則表達式

(\:)(?=\w)|(?<=\w)(\:)

它滿足條件 2 和 3,但在條件 3 上仍然失敗,因為它與時間字符串表示中的冒號相匹配。 我該如何解決?

編輯:如果可能的話,它必須在一個正則表達式語句中

單詞字符\w包括數字[a-zA-Z0-9_]所以只用[a-ZA-Z]代替

(\:)(?=[a-zA-Z])|(?<=[a-zA-Z])(\:)

在這里測試

您可以使用

(:\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.

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