我的文本字符串在单元格D2中:
Decision, ERC Case No. 2009-094 MC, In the Matter of the Application for Authority to Secure Loan from the National Electrification Administration (NEA), with Prayer for Issuance of Provisional Authority, Dinagat Island Electric Cooperative, Inc. (DIELCO) applicant(12/29/2011)
这个功能:
=regexextract(D2,"\([A-Z]*\)")
会抓住(NEA)而不是(DIELCO)
我想提取(NEA)和(DIELCO)
您可以使用捕获组,这将导致 regexextract()
返回一个数组。您可以将其用作单元格结果,在这种情况下,您将获得一系列结果,或者您可以将数组提供给另一个函数以将其重新格式化为您的目的。例如:
regexextract( "abracadabra" ; "(bra).*(bra)" )
将返回数组:
{bra,bra}
另一种方法是使用 regexreplace()
。这样做的优点是替换是全局的(比如 s/pattern/replacement/g
),所以你不需要事先知道结果的数量。例如:
regexreplace( "aBRAcadaBRA" ; "[a-z]+" ; "..." )
将返回字符串:
...BRA...BRA
这里有两个解决方案,一个使用作者示例中的特定术语,另一个扩展作者的样本正则表达式模式,似乎与所有ALLCAPS术语相匹配。我不确定哪个是想要的,所以我给了两个。
(将文本块放在A1中)
ALLCAPS中所有单词的通用解决方案
=regexreplace(regexreplace(REGEXREPLACE(A1,"\b\w[^A-Z]*\b","|"),"\W+","|"),"^\||\|$","")
结果:
ERC|MC|NEA|DIELCO
注意:工作首当其冲的是CAPITALIZED公式,小写函数仅用于清理。
如果你想要空间分离,公式有点简单:
=trim(regexreplace(REGEXREPLACE(A1,"\b\w[^A-Z]*\b"," "),"\W+"," "))
结果:
ERC MC NEA DIELCO
(我喜欢在谷歌电子表格中使用正则表达式的一种方法是从另一个单元格中读取正则表达式模式,这样我就可以更改它而无需使用该模式编辑或重新粘贴到所有单元格中。这看起来如此:
单元格A1:
Block of text
Cell B1(无引号):
\b\w[^A-Z]*\b
公式,在任何细胞中:
=trim(regexreplace(REGEXREPLACE(A1,B$1," "),"\W+"," "))
通过将其锚定到B $ 1,我可以立即填充所有行,并且引用不会增加。)
上一个答案:
选定条款的特定解决方案(ERC,DIELCO)
=regexreplace(join("|",IF(REGEXMATCH(A1,"ERC"),"ERC",""),IF(REGEXMATCH(A1,"DIELCO"),"DIELCO","")),"(^\||\|$)","")
结果:
ERC|DIELCO
和以前一样,工作首当其冲的是CAPITALIZED公式,小写函数只是用于清理。
该公式将在文本块中找到任何ERC或DIELCO或两者。初始顺序无关紧要,但输出将始终为ERC,然后是DIELCO(外观顺序丢失)。这解决了使用“(bra)。*(bra)”的前一个答案的缺点,因为孤立的ERC或DIELCO仍然可以匹配。
这也有一个更简单的空间分隔形式:
=trim(join(" ",IF(REGEXMATCH(A1,"ERC"),"ERC",""),IF(REGEXMATCH(A1,"DIELCO"),"DIELCO","")))
结果:
ERC DIELCO