簡體   English   中英

Python REGEX,重新格式化字符串

[英]Python REGEX, reformat a string

我正在嘗試創建一個正則表達式,它將接受一個字符串並替換某些字符

  1. 雙倍或更多的空間減少到一個空間
  2. 以下字符將被替換為一個單詞:"#" -> "number, "@" -> "at"
  3. 空格將被替換為“-”,除非它位於字符串的末尾
  4. 只包含az, AZ, 0-9 和: !@#$%&/,
  5. 兩個或多個“-”將減少到一個
"Hello, Wor--ld! 1$2@3-   " -> "hello-wor-ld-1-dollars-2-at-3"

我的代碼:

name = "Hello, World! 1$2@3-   "

name = re.sub("[^a-zA-Z0-9]+","-",name.lower())

print(name)

但結果是“hello-world-1-2-3-”

以下是您可以用作解決問題的基礎的代碼:

import re
name = "Hello, World! 1$2@3-   "
name = re.sub("[^a-zA-Z0-9@#$&]+", "-", " ".join(name.lower().split()))
dct = {'#': 'number', '@': 'at', '$': 'dollars', '&': 'and'}
name = re.sub(r'[$@#]', lambda x: f"-{dct[x.group()]}-", name)
print(name.strip('-'))
# => hello-world-1-dollars-2-at-3

請參閱Python 演示

筆記:

  • " ".join(name.lower().split()) - 刪除前導/尾隨空格,將多個空格縮小到單詞之間的單個出現處,並用空格分割
  • re.sub("[^a-zA-Z0-9@#$&]+", "-", ...) - 替換除字母數字、 #@$&字符以外的所有一個或多個連續字符帶連字符
  • re.sub(r'[$@#]', lambda x: f"-{dct[x.group()]}-", name) - 用單詞替換指定的特殊字符
  • name.strip('-')刪除前導/尾隨連字符。

暫無
暫無

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

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