sgp*_*667 11 regex microsoft-excel microsoft-excel-2010
我有一个电子表格,需要我做一些匹配,也就是说,它是一个债券列表,它们的股票代码(名称)和一些关于它们的数据。我想匹配他们的股票代码(名称),我知道正则表达式如何使用正则表达式匹配它们(“[AZ]+ \d{2,4}-\w+ \w+”),但我不熟悉如何使用他们在 VBA 之外(是的,我更喜欢不使用 VBA,会使用这个的人不知道 VBA)。
我读了微软的这篇文章,所以我知道这个问题(有问题的陈述不是答案)是不正确的,但我从来没有运气真正找到如何在 Excel 中实现正则表达式,尤其是公式(也许MATCH
只是也许)。
最后我的一个例子(只是相关的列)使我的问题更具体,我想返回带有代码的单元格行:
JPMCC 2012-1 A1
Prepay %
Loss %
Credit Support
ETC...
MLMTI 2014-6 B4
Prepay %
Loss %
Credit Support
ETC...
Run Code Online (Sandbox Code Playgroud)
要返回的行:
JPMCC 2012-1 A1
MLMTI 2014-6 B4
Run Code Online (Sandbox Code Playgroud)
注意我在这个专栏里有很多这样的债券,我需要一一找到
另外,如果您发现使用辅助列在这里很有用,我对此持开放态度,现在我只想避免使用 VBA。
如果需要,我会提供更多信息。
谢谢
更新
数据,在这种情况下,包括“信用支持”、“累积损失 %”、“预付 %”等标题。有几十个这样的标题,但它的所有文本文本,数字都在不同的列中。
Excel 没有正则表达式,但您当然可以一次构建一个公式的大部分功能。这里有些例子:
提取第一个以空格分隔的单词:
B1: =FIND(" ", A1)
C1: =LEFT(A1, B1 - 1)
Run Code Online (Sandbox Code Playgroud)
检查第一个单词是否全部为非小写:
D1: =EXACT(UPPER(C1), C1)
Run Code Online (Sandbox Code Playgroud)
提取第二个空格分隔的单词:
E1: =FIND(" ", A1, B1 + 1)
F1: =MID(A1, B1 + 1, E1 - B1 - 1)
Run Code Online (Sandbox Code Playgroud)
如果可能,提取 4 位数年份:
G1: =LEFT(F1, 4) - 0
Run Code Online (Sandbox Code Playgroud)
您可以根据需要创建尽可能多的这些提取和测试,以确信 A1 中的数据与股票代码格式匹配,而不是标题格式,然后使用类似的内容仅在正确的情况下重现该单元格:
H1: IFERROR(IF((B1+E1+LEN(C1)+LEN(F1)+G1+D1)*0=1,"",A1),"")
Run Code Online (Sandbox Code Playgroud)