如果要从长字符串中提取某些文本或注明日期,应该使用什么公式?文本到列不起作用,因为我有一个不一致的数据列表。使用下面的示例,我想提取“女性”和“出生日期”。
例如, {'名称:'John Doe','年龄:'29','性别:'女性','出生日期:'1989-09-28','国家/地区:'“英国”} < / p>
我已经阅读了MID,LENS,RIGHT和LEFT,但真的不确定我该怎么做。如果有人可以帮助我,将不胜感激!
答案 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'}
和retType
。 0
用于性别,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)
希望这会有所帮助!