如何将字符串中的特定数字转换为字符串;NUM";用Python

如何将字符串中的特定数字转换为字符串;NUM";用Python,python,text,Python,Text,为了创建巴比伦文字的数据库,我需要清除一些文字并标记它们。我可以做托卡尼化,但在编写清理脚本的过程中,我遇到了一个问题 我想清除所有的数字,因为它们对我来说没有真正的意义(可能只是它们有多少只羊),但重要的是将数字保留在中 假设我有以下文本: hello 502world a0.0.3b.1.4 5 我想把它转到: hello NUMworld aNUMb NUM 5 请注意,0.0.3和.1.4除了也变成NUM的502之外,还变成了NUM,但在的内部,我想保持数字不变 文本中有非ASCII字符

为了创建巴比伦文字的数据库,我需要清除一些文字并标记它们。我可以做托卡尼化,但在编写清理脚本的过程中,我遇到了一个问题

我想清除所有的数字,因为它们对我来说没有真正的意义(可能只是它们有多少只羊),但重要的是将数字保留在

假设我有以下文本:

hello 502world a0.0.3b.1.4 5

我想把它转到:

hello NUMworld aNUMb NUM 5

请注意,
0.0.3
.1.4
除了也变成NUM的
502
之外,还变成了
NUM
,但在
的内部,我想保持数字不变

文本中有非ASCII字符,这使得它更难处理

我试着自己写一些代码来处理它,但它变得非常烦人,我认为有更多的
Pythonic
方法可以做到这一点

这是一个文本示例。

使用函数的解决方案:

import re

s = "hello 502world a0.0.3b .1.4 <sub>5</sub>"
replaced = re.sub(r'(NUM){2,}', 'NUM', re.sub(r'(?<!<sub>)\.?\d+', 'NUM', s))

print(replaced)
重新导入
s=“你好502world a0.0.3b.1.4 5”
已替换=re.sub(r'(NUM){2,}',NUM',re.sub(r'(?)\.?\d+',NUM',s))
打印(已替换)
输出:

hello NUMworld aNUMb NUM <sub>5</sub>
hello NUMworld aNUMb NUM 5

一个简单的正则表达式就可以做到这一点:

re.sub(r'(\.?\d+)+', 'NUM', "hello 502world a0.0.3b .1.4")
#'hello NUMworld aNUMb NUM'

您并没有真正“标记化”它,因为输出不是一个标记列表,它只是一个修改过的字符串。所以只需使用正则表达式来修改字符串。如果你想标记化,我的答案可能会有所不同。我已经把每件事都标记了,但我需要再过滤一点。我讨厌成为一个无赖,但我需要保存号码,因为他在5我不理解你的评论。至少不是它的第二部分。我改变了问题,请再看一遍。还有什么其他数字不应该被替换?OP已经改变了忽略“子”标签内数字的请求。使正则表达式变得更难。