MS Excel – 从子串提取独特的文本模式关键字

我想通过使用MS Excel公式从包含唯一search模式的文本子string中提取文本/年。 我有一个独特date的列(单元格A2:A19),在某些情况下,文本前后有周围的文本,我只想提取所有唯一以数字“1”开始的年份(即17 18,19,19等)

当前公式 在这里输入图像说明

DATE April 1 1799 April 11 1867 February 12 1806 February 21 1798 February 28 1844 as Delaware Township February 5 1798 February 7 1892 Verona Township February 9 1797 January 19 1748 July 10 1721 as Upper Penns Neck Township March 15 1860 March 17 1870 (as Raritan Township) March 17 1874 March 23 1864 March 5 1867 April 28th 1828 1840s 1878 as Lehigh Township 

目前的结果(从上面使用的公式)

在这里输入图像说明

在这里输入图像说明

希望的结果:

在这里输入图像说明

除了1840s这个公式将会让你1840s每一个

 =TRIM(MID(A2,MIN(IFERROR(SEARCH({"17?? ","18?? ","19?? "},A2 & " "),1E+99)),4)) 

这是一个数组公式,在退出编辑模式时必须用Ctrl-Shift-Enter确认。 如果正确完成,则Excel将在公式周围放置{}

在这里输入图像说明

如果允许使用macros,您可以创build一个代码模块并将其放入代码中:

 Public Function GetYear(text As String) Dim regex Set regex = CreateObject("VBScript.RegExp") regex.Pattern = ".*(\d{4}).*" Set matches = regex.Execute(text) GetYear = matches(0).Submatches(0) End Function 

然后,可以使用“= GetYear(A1)”等公式来计算所有年份,包括1840年代和其他类似的格式。 它基本上在给定的string中search一组相邻的四位数字。 不是最好的date匹配algorithm,但听起来像它将足够您的使用情况。

使用斯科特提供的MS Excel公式,我能够做出一个小小的周期来解决只捕获/提取date和其他类似的问题。 这是通过仅添加通配符星号来表示任意系列的字符,在问号“??”之后。 谢谢Scott … = IFERROR(TRIM(MID(A2,MIN(IFERROR(SEARCH({“16 ?? *”,“17 ?? *”,“18 ?? *”,“19 ?? *”) A2&“”),1E + 99)),4)),“”)