python - 如何使用正则表达式将数字与给定单词分开?
问题描述
如果它们被数字包围,我需要分隔给定的单词。例如,单词是“x”。
s = '''
1x 3 # OK
s1x2 # WRONG
2x # OK
s1 x2 # WRONG
x2 # OK
1sx3 # WRONG
'''
print(re.sub("(?<=\d)\s*x\s*(?=\d)", " x ", s))
即使周围的数字不是数字,这也会将所有内容分开,我的意思是,s1 x2
也不s1x3x
应该匹配。
另一方面,它不适用于“否” - 仅适用于最后 2 行:
s = '''
2 no 3 # OK (but it's not needed to match)
2no # OK
3no2 # OK
no9 # OK
xno9 # WRONG
5 non # WRONG (for 'no')
'''
print(re.sub("(?<=\d)\s*no\s*(?=\d)", " x ", s))
我已经编辑了一些例子。需要在句子中使用它,例如:
切断土地并竖立 1x 3 卧室小屋平房和 1x2 卧室平房。安装 2 个非照明招牌和 2 个无广告标志。
第 1 句中的两者都应该匹配,只有第 2 句中的第 2 句匹配。
编辑
感谢下面的帖子,我发现这个匹配:
\b(?:\d*\s*x\s*\d+|\d+\s*x\s*\d*)\b
但问题是它不适用于更换。这个想法是为被数字包围的单词添加一个额外的空间。因此,虽然这个 now 模式正确地选择了那些短语(来自单行和句子),但它不适用于替换,因为它应该只匹配这些单词:
s = "Sever land and erect 1x 3 Bedroom chalet bungalow and 1x2 Bedroom bungalow"
re.sub("\b(?:\d*\s*x\s*\d+|\d+\s*x\s*\d*)\b", " x ", s, flags=re.IGNORECASE)
解决方案
推荐阅读
- python - 无法访问 JIRA 项目的“来自”属性
- python - 在 python 3.5 中 pip install json2html 不起作用
- django - Django - 基于类的视图 - 模型中的元标记不会传递给模板
- bash - 在 bash 脚本中将日志文件读入 2D/1D 数组
- c# - 除了使用开关创建实例之外,如何从不同的子类动态调用方法?
- javascript - 如何隐藏json数组
- here-api - 实现自己的 TileServerProvider
- c# - 如何修复 HttpContext.Current.User.Identity.Name 的 Veracode CWE 117
- bash - kubectl exec 返回无异常的错误消息?
- javascript - 如何在不使用 JSX 的情况下在 React 中使用 CanvasJS 元素?