簡體   English   中英

替換除兩位數之間的所有連字符

[英]Replace all hyphens except in between two digits

按照此處的問題如果連字符未出現在美國郵政編碼中,我將嘗試替換它。

邏輯是:

  • 不要在數字之間匹配連字符
  • 匹配連字符

我嘗試使用以下方法實現這一目標:

import re
p = re.compile(r'(?!\d+\-\d+)-') # regex here
test_str = "12345-4567 hello-you"
re.sub(p, " ", test_str)
  • 預期輸出: 12345-4567 hello you
  • 實際輸出: 12345 4567 hello you

我究竟做錯了什么?

您可以使用

import re
p = re.compile(r'(?!(?<=\d)-\d)-')
test_str = "12345-4567 hello-you 45-year N-45"
print(re.sub(p, " ", test_str))
# => 12345-4567 hello you 45 year N 45

請參閱Python 演示正則表達式演示

(?!(?<=\\d)-\\d)-正則表達式匹配

  • (?!(?<=\\d)-\\d) - 字符串中沒有緊跟- (緊跟在一個數字之前)后跟一個數字的位置
  • - - 一個連字符。

另一種方法是像字符串一樣匹配和捕獲郵政編碼以保留和替換它們-在所有其他上下文中:

re.sub(r'\b(\d{5}-\d{4})\b|-', r'\1 ', text)

請參閱正則表達式演示Python 演示

注意\\b(\\d{5}-\\d{4})\\b匹配單詞邊界位置並將其捕獲到組 1 中,然后匹配任意五位數字、連字符、四位數字和單詞邊界。 替換模式中的\\1反向引用指的是在組 1 中捕獲的值。

暫無
暫無

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

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