在Python中,我尝试匿名化或屏蔽n个字符(从最后一个)。它适用于匹配,但我想忽略包含数字的单词。你知道吗
例如
string = 'SomeText +12 555 660 000 f00b4r abc123'
digits = 5
repl_char = 'X'
regex = '[0-9\s\+]+'
for match in re.finditer(regex, string):
phone_no = match.group()
new_ph_no = ''
i = 0
if phone_no in ['', ' ']:
pass
else:
for phone_digit in phone_no[::-1]:
if phone_digit == ' ' or i >= digits:
new_ph_no += phone_digit
else:
new_ph_no += repl_char
i += 1
string = string.replace(phone_no, new_ph_no[::-1])
print(string)
电流输出:'SomeText +x2 555 6xx xxx fxxbxr abcxxx'
所需输出:'SomeText +12 555 6XX XXX f00b4r abc123'
我尝试将'[^?!a-zA-Z(0-9).*$]'
添加到regex中,它提供了所需的输出,但当我将字符串作为'SomeText +12 555 660 000'
传递时失败了
我的意图是从任何类型的字符串打印电话号码,并用“x”(或任何字符)替换n个数字
如何打印所需的输出?你知道吗
如果数字总是以+开头,并且您希望不使用它来获取完整的数字,请使用:
它将返回(从您的示例中):
12 555 660 000
在线查看:https://regex101.com/r/aEeIgK/2
说明:
\+
在比赛开始前先确定一个+开始。转义为+是regexp量词。你知道吗\b
以单词边界结尾(因此,如果是以数字开头的混合字符串,则它不会是匹配的一部分)。你知道吗(\d+(?:\s\d+)*)
带括号(...)
是匹配的内容。\d+
开头的一个或多个数字是桅杆。\d
是数字;+
一个或多个量词。你知道吗(?:\s\d+)*
可选(零个或更多)字符串,以空格\s
开头,后跟数字。你知道吗(?:...)
是不匹配的括号。你知道吗*
表示零或更多的量词。你知道吗\s
空白(只有一个)。你知道吗使用
lambda
中的re.sub
可以执行以下操作:详情:
(\b\d*(?: +\d+)*)((?: *\d){5})(?! *\d)
匹配最后5个数字,这些数字前面有0或空格分隔的数字,后面没有可选的空格和数字。你知道吗re.sub
中,我们使用lambda函数X
替换每个数字相关问题 更多 >
编程相关推荐