excel - 提取单元格内的特定值(正则表达式模式)

标签 excel excel-formula

也许你们中的某个人可以帮助我,或者为我指明如何在 Excel 中解决此问题的正确方向。

我有一个工作表,其中的单元格包含混合值,例如:

texxtext W.1234.56 文本

文本文本U.3853.23

P.3853.34 文本文本

我只需要中间的特定文章编号 (X.XXXX.XX)。就像这个正则表达式模式 ([A-Za-z].\d\d\d\d.\d\d)

有没有办法用公式函数来实现这一点?

提前致谢!

[A-Za-z].\d\d\d\d.\d\d

最佳答案

PY():

如果适用,您可以使用 PY() 函数来实现此目的:

enter image description here

B1中的公式:

=PY(
    xl("A1:A3").replace(r'.*\b([A-Za-z]\.\d{4}\.\d{2})\b.*', r'\1', regex=True)[0].values
)

在撰写本文时,PY() 仅在 ms365 订阅的测试版 channel 内可用。


搜索():

否则,首先尝试更简单的方法,看看在常规 SEARCH() 模式中使用通配符是否足够:

=MID(A1:A3,SEARCH("?.????.??",A1:A3),9)

使用这种方法,我假设文本中没有或很少有机会存在遵循该确切模式的其他子字符串。


FILTERXML():

另一种更复杂的方法是使用FILTERXML()。这样您就可以利用 xpath-patterns 来检查手头的模式:

=FILTERXML("<t><s>"&SUBSTITUTE(A1:A3," ","</s><s>")&"</s></t>","//s[string-length()=9][concat(substring(., 2, 1),substring(.,7,1))='..'][translate(substring(.,1,1),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','')=''][concat(substring(.,2,4),substring(.,8))*0=0]")

这里谓词的 and-ing 结构的意思是:

  • [string-length()=9] - 检查节点长度是否为 9 个字符;
  • [concat(substring(., 2, 1),substring(.,7,1))='..'] - 当我们连接第二个和第七个字符时,它等于 '. .';
  • [translate(substring(.,1,1),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','')=''] - 如果我们将第一个索引处的字符从任何(大写)字母字符翻译为什么都没有,它等于一个空字符串;
  • [concat(substring(.,2,4),substring(.,8))*0=0] - 如果我们连接剩余的字符并将其乘以零,则结果将等于零.

这里我假设以空格分隔的字符串开头。我们使用空格将文本分割成节点。如果标点符号发挥作用,这就不再那么简单了。

‡‡ 有关 FILTERXML() 的更多信息 here

关于excel - 提取单元格内的特定值(正则表达式模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77541516/

相关文章:

Excel:下一个更大的值

vba - 复制/粘贴错误 特殊粘贴

Python - Win32Com - 如何从 Excel 电子表格单元格中提取超链接?

excel - TEXTJOIN 输出的逆序

excel - 按钮上显示的文本 Excel 宏

excel - Excel 公式中的增量常数

c# - Excel VSTO 如何工作?

VBA找到第一个非空白行

excel - 在列中查找匹配值,然后在行中查找匹配值

java - 在 Java 中相对地将 excel 公式设置为整个列?