我想从每行中删除数字,包括冒号。
示例数据:
22:18:01(165):access-list OUTSIDE_IN extended permit deny IP
我尝试使用公式
=RIGHT(A2,LEN(A2)-FIND(" ",A2))
但没用。它删除了所有内容,22:18:01(165):access-list
因为最后一个冒号后没有空格。
答案1
假设您的所有行看起来都像您的示例行(具体来说,您想要保留的文本部分没有冒号),您可以为此使用文本到列,并指定:
为分隔符。
选择包含数据的列,然后单击Text to Columns
选项Data
卡。
在第一个屏幕上选择Delimited
,在第二个屏幕上,只检查Other
并输入冒号:
点击完成,您的数据现在应该根据每个冒号分成 4 列。只需删除前 3 列,您就剩下access-list OUTSIDE_IN extended permit deny IP
或者,假设每行之前的字符数access-list
相同,则可以使用=RIGHT(A2,LEN(A2)-14)
答案2
适用于任意长度数字的最简单的公式解决方案适用于数据开头的冒号分隔数字固定数量的情况,例如三个数字:
输入以下公式B2
,然后按 ctrl-enter/copy-paste/fill-down/auto-fill 将其填充到表格其余列中:
=RIGHT(A2,LEN(A2)-FIND(CHAR(1),SUBSTITUTE(A2,":",CHAR(1),3)))
解释:
可选的第四个参数允许我们用文本中其他地方没有出现的特殊字符SUBSTITUTE()
替换特定出现的字符(在本例中为第三个字符)。之所以使用,是因为它几乎可以保证:
CHAR(1)
绝不出现在任意字符串中。
这会导致出现第二个单独的分隔符,我们希望保留的数据位于右侧。您的RIGHT()
公式现在将正常工作。
请注意,即使您想要保留的文本中包含冒号,此解决方案也有效。
一个更通用的公式解决方案,允许多变的:
数据开头的分隔符数字(以及任意长度的数字)的数量为:
=RIGHT(A2,LEN(A2)-FIND(CHAR(1),SUBSTITUTE(A2,":",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,":","")))))
解释:
第二个命令SUBSTITUTE()
删除所有冒号,删除冒号后的文本长度与原文长度之差就是冒号的数量。
对于样本数据:
LEN(A2)-LEN(SUBSTITUTE(A2,":",""))
→3
。- 因此
=RIGHT(A2,LEN(A2)-FIND(CHAR(1),SUBSTITUTE(A2,":",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,":","")))))
→=RIGHT(A2,LEN(A2)-FIND(CHAR(1),SUBSTITUTE(A2,":",CHAR(1),3)))
即与第一个公式相同(除了第一个公式3
是第三个冒号,而在这个公式中是最后的冒号)
显然,这个公式将不是如果您希望保留的文本中有冒号,则可以正常工作。