使用Excel从长字符串中提取文本

时间:2018-10-31 14:05:07

标签: excel excel-formula

如果要从长字符串中提取某些文本或注明日期,应该使用什么公式?文本到列不起作用,因为我有一个不一致的数据列表。使用下面的示例,我想提取“女性”和“出生日期”。

例如, {'名称:'John Doe','年龄:'29','性别:'女性','出生日期:'1989-09-28','国家/地区:'“英国”} < / p>

我已经阅读了MID,LENS,RIGHT和LEFT,但真的不确定我该怎么做。如果有人可以帮助我,将不胜感激!

3 个答案:

答案 0 :(得分:2)

您可以创建自定义UDF。

Public Function getDemographics(inputString As String, retType As Long) As String

    If retType < 0 Or retType > 1 Then
        getDemographics = "Invalid retType!"
        Exit Function
    End If

    Dim retArr(1)

    With CreateObject("VBScript.RegExp")
        .Pattern = "'Gender:''(\w+).*?'Date of birth:''([\d-]+)"
        If .test(inputString) Then
            With .Execute(inputString)(0)
                retArr(0) = .SubMatches(0)
                retArr(1) = .SubMatches(1)
                getDemographics = retArr(retType)
            End With
        End If
    End With

End Function

这使用正则表达式。您提供两个参数inputString,即

{'Name:''John Doe', 'Age:''29', 'Gender:''Female','Date of birth:''1989-09-28', 'Country:'"United Kingdom'}

retType0用于性别,1用于DOB。

在工作表上,您只需调用以下函数:

=getDemographics(A1,1)

哪个会返回:

  

1989-09-28

答案 1 :(得分:0)

没有一个函数可以做到这一点。您必须使用多种功能。 假设字符串位于A1单元格中,则以下功能适用于性别。

=MID(A1,FIND("Gender:",A1)+9,FIND("'",A1,FIND("Gender:",A1)+9)-FIND("'",A1,FIND("Gender:",A1)+8)-1)

您需要在“性别”值之前和之后找到报价,然后在中间进行报价, 出生日期可以做类似的事情

答案 2 :(得分:0)

使用LEFT()和RIGHT()的困难之处在于MALE和FEMALE的字母数不同。因此,您需要使用一些抽象的思想。要使用LEFT()和RIGHT(),您可以执行以下操作(假设信息位于单元格A1中):

=RIGHT(LEFT(A1,FIND("',",A1,FIND("Gender",A1))-1),FIND("',",A1,FIND("Gender",A1))-FIND("Gender",A1)-9)

这将返回“女性”或“男性”,具体取决于各个输入。 (-18是从性别开始到(Fe)Male开始使用两次的距离。)

类似地,我们可以在出生日期做同样的事情。但是,由于这是一个恒定长度的字段,因此我们可以使用实际数字。

=RIGHT(LEFT(A1,FIND("birth:''",A1)+17),10)

希望这会有所帮助!