Excel-从字母数字字符串中提取所有数字
背景 我知道如何使用Excel-从字母数字字符串中提取所有数字,excel,xml,xpath,filter,excel-formula,Excel,Xml,Xpath,Filter,Excel Formula,背景 我知道如何使用TEXTJOIN()和SUBSTITUTE()等函数从字母数字字符串中提取所有数字。不过,我对非数组输入的方式感兴趣,并认为可以通过FILTERXML()来完成,因为我正在尝试学习更多关于该主题的知识 Excel的功能从Excel 2013开始提供(非在线或Mac),并支持XPATH 1.0。因此,我试图实现可以找到的双重技巧 问题 那么,如何通过Excel中的XPATH使用doubletranslate()函数将所有非数字字符转换为字符串呢 | Sample | D
TEXTJOIN()
和SUBSTITUTE()
等函数从字母数字字符串中提取所有数字。不过,我对非数组输入的方式感兴趣,并认为可以通过FILTERXML()
来完成,因为我正在尝试学习更多关于该主题的知识
Excel的功能从Excel 2013开始提供(非在线或Mac),并支持XPATH 1.0
。因此,我试图实现可以找到的双重技巧
问题 那么,如何通过Excel中的
XPATH
使用doubletranslate()
函数将所有非数字字符转换为字符串呢
| Sample | Desired Output |
|-----------|----------------|
| aBc1d5_x9 | 159 |
| 12:2&0 | 1220 |
| ABC123 | 123 |
我试过:
=FILTERXML(“&A2&”,“//s[translate(,translate(,'0123456789','','',''))”)
。但是,这将返回与A2
完全相同的值(未更改)。不受支持的XPATH
函数或错误语法通常会返回#值
错误。因此,这看起来确实是受支持的,但在我的语法中,我出了问题,但我猜不到。免责声明:这个答案与XPath无关,但提供了一个单单元格、非数组输入的问题解决方案
使用Office 365,不再需要数组输入公式。使用新的Filter()函数,所有操作都可以在一个单元格中完成
使用新的Let()函数(目前在Insider preview中),公式可能比以前需要的要短得多
=LET(MyText,MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1),
TEXTJOIN("",TRUE,FILTER(MyText,(CODE(MyText)<=57)*(CODE(MyText)>=48))))+0
=LET(我的文本,中间(A1,行(间接)(“A1:A”)和LEN(A1)),1),
TEXTJOIN(“),TRUE,过滤器(MyText,(代码(MyText)=48))+0
如果还没有LET(),请使用较长的版本
=TEXTJOIN("",TRUE,FILTER(MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1),(CODE(MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1))<=57)*(CODE(MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1))>=48)))+0
=TEXTJOIN(“,TRUE,过滤器(中间(A1,行(间接的)(“A1:A”和LEN(A1))),1),(代码(中间(A1,行(间接的)(“A1:A”和LEN(A1))),1))=48))+0
这也适用于Excel在线和移动设备
如果希望结果为文本,请删除公式末尾的
+0
。免责声明:此答案与XPath无关,但提供了一个单单元格、非数组输入的问题解决方案
使用Office 365,不再需要数组输入公式。使用新的Filter()函数,所有操作都可以在一个单元格中完成
使用新的Let()函数(目前在Insider preview中),公式可能比以前需要的要短得多
=LET(MyText,MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1),
TEXTJOIN("",TRUE,FILTER(MyText,(CODE(MyText)<=57)*(CODE(MyText)>=48))))+0
=LET(我的文本,中间(A1,行(间接)(“A1:A”)和LEN(A1)),1),
TEXTJOIN(“),TRUE,过滤器(MyText,(代码(MyText)=48))+0
如果还没有LET(),请使用较长的版本
=TEXTJOIN("",TRUE,FILTER(MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1),(CODE(MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1))<=57)*(CODE(MID(A1,ROW(INDIRECT("A1:A"&LEN(A1))),1))>=48)))+0
=TEXTJOIN(“,TRUE,过滤器(中间(A1,行(间接的)(“A1:A”和LEN(A1))),1),(代码(中间(A1,行(间接的)(“A1:A”和LEN(A1))),1))=48))+0
这也适用于Excel在线和移动设备
如果希望结果为文本,请删除公式末尾的
+0
。根据您的excel版本,您可以使用:
=CONCAT(IF(ISNUMBER(-MID(A2,SEQUENCE(LEN(A2)),1)),MID(A2,SEQUENCE(LEN(A2)),1),""))
一、 同样,我们也无法弄清楚如何将
translate
与FILTERXML
一起使用。它似乎可以与在线xpath测试仪(与1.0兼容)配合使用,但似乎无法与Excel配合使用。根据您的Excel版本,您可以使用:
=CONCAT(IF(ISNUMBER(-MID(A2,SEQUENCE(LEN(A2)),1)),MID(A2,SEQUENCE(LEN(A2)),1),""))
一、 同样,我们也无法弄清楚如何将
translate
与FILTERXML
一起使用。它似乎可以与在线xpath测试人员(与1.0兼容)一起使用,但与Excel不兼容。感谢您的测试。这可能是一只虫子吗?你的公式是一个不错的选择。@JvdV我不知道。我还没有找到使用带有FILTERXML/xPath
参数的函数的MS文档。但是某些XPath1.0函数似乎不起作用,即使它们在这方面可以正常工作。在您的例子中,语法应该是//s/translate(,,translate(,'0123456789','','')
,但这不适用于Excel。--><代码>#值代码>玩弄translate
让我相信我们只能使用FILTERXML
从XML中选择节点。数据转换似乎是不允许的=(感谢您测试Ron。这可能是一个bug吗?不过您的公式是一个不错的选择。@我不知道JvdV。而且我还没有找到使用带有FILTERXML/xPath
参数的函数的MS文档。但是某些xPath 1.0函数似乎不工作,即使它们在这方面工作正常。在您的情况下,语法应该是//s/translate。)(,,translate(,'0123456789','','')
,但这不适用于Excel。-->#VALUE!
玩弄translate
让我相信我们只能使用FILTERXML
从XML中选择节点。数据转换似乎是不允许的=(