python - Python 正则表达式:在字符和字母周围插入空格而不被空格包围
问题描述
我有一个表达式'Please calculate 1x20 +4 + 5-1 - 2/2 /4'
,我需要将其转换为:
'Please calculate 1 x 20 + 4 + 5 - 1 - 2 / 2 / 4'
重要的要求是字符和感兴趣的字母之间只有一个空格。我写了以下代码,但没有用:
import re
message = 'Please calculate 1x20 +4 + 5-1 - 2/2 /4'
message = re.sub(r'\s*(?:(?<!\s)([<>x])(?!\s))\s*', " {0} ".format(re.search(r'\s*(?:(?<!\s)([<>x])(?!\s))\s*', message).group(0)), message)
message = re.sub(r'\s*(?:(?<!\s)([<>+])(?!\s))\s*', " {0} ".format(re.search(r'\s*(?:(?<!\s)([<>+])(?!\s))\s*', message).group(0)), message)
message = re.sub(r'\s*(?:(?<!\s)([<>-])(?!\s))\s*', " {0} ".format(re.search(r'\s*(?:(?<!\s)([<>-])(?!\s))\s*', message).group(0)), message)
message = re.sub(r'\s*(?:(?<!\s)([<>/])(?!\s))\s*', " {0} ".format(re.search(r'\s*(?:(?<!\s)([<>/])(?!\s))\s*', message).group(0)), message)
message = re.sub(r'\s*(?:(?<!\s)([<>*])(?!\s))\s*', " {0} ".format(re.search(r'\s*(?:(?<!\s)([<>*])(?!\s))\s*', message).group(0)), message)
print(message)
我哪里错了?
解决方案
而不是使用负面的lookbehinds和冗余重复相同的替换,您可以只捕获潜在的周围空白\s*
(零个或多个)并进行有保证的替换。
import re
message = 'Please calculate 1x20 +4 + 5-1 - 2/2 /4'
message = re.sub(r'\s*([<>x+*/-])\s*', ' \\1 ', message)
print(message)
\s*
- 零次或多次出现的空白字符[<>x+*/-]
- 正则表达式字符类,只匹配指定的几个字符中的一个
输出:
Please calculate 1 x 20 + 4 + 5 - 1 - 2 / 2 / 4
推荐阅读
- reactjs - 从 React Bootstrap 表中禁用/删除分页号
- ios - 使用 [Navigation Controller, TabBarViewcontroller] 再次设置根控制器时发生内存泄漏 UIViewController
- c++ - 程序告诉我论点不匹配,即使它们明显匹配
- python - Python中链表的多重赋值
- google-sheets - 为什么我的 INDEX/MATCH 函数返回错误值?
- javascript - E/启动器 - 无效的会话 ID。运行黄瓜量角器框架时出现错误。我该如何解决它并运行多个功能文件?
- c++ - 视觉工作室。无法启动程序''系统找不到指定的文件
- python - 能够生成csv文件,但它们不会分成多列,所有列都在第一列
- javascript - Ruby on rails Bootstrap Modal 不工作
- javascript - 如何在不使用 blob 和数据方案 url 的情况下在新选项卡中显示来自服务器的文件