python - Python REGEX,重新格式化字符串
问题描述
我正在尝试创建一个正则表达式,它将接受一个字符串并替换某些字符
- 两个或多个空格减少为一个空格
- 以下字符将被替换为单词:“#”->“数字”、“@”->“at”
- 空格将被替换为“-”,除非它位于字符串的末尾
- 仅包含 az、AZ、0-9 和:!@#$%&/,
- 双倍或更多“-”将减少为一个
"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('-')
删除前导/尾随连字符。
推荐阅读
- django - Django 限制模型对象的用户查看权限
- java - 我应该使用什么 Hibernate Query 来检索 MS SQL 中的最新记录?
- python - 如何检查一个角色是否在另一个角色前面?
- realex-payments-api - 全球支付 HPP 沙箱。使用 ngrok 时 MERCHANT_RESPONSE_URL 中的 508 个无效字符
- python-3.x - Python Pandas用动态名称修剪列的空白
- python - 简单非线性回归的 Keras 预测
- javascript - Moment.js - 如何获取用户时区?
- sql - SQL更新(案例)多个值
- python - 使用 joblib 保存的模型给出不同的分数
- gps - 来自两点边界的 Mapbox 矩形线