gpt4 book ai didi

excel - 如何提取文本字符串中的文本

转载 作者:行者123 更新时间:2023-12-01 17:29:40 25 4
gpt4 key购买 nike

我有一个简单的问题,我希望在不使用 VBA 的情况下解决它,但如果这是解决它的唯一方法,那就这样吧。

我有一个包含多行(全为一列)的文件。每行都有如下所示的数据:

1 7.82E-13 >gi|297848936|引用|XP_00| 4-氢氧化物 gi|297338191|gb|23343|随机随机

2 5.09E-09 >gi|168010496|ref|xp_00| 2-丙酮酸

等等...

我想要的是某种方法来提取以“gi|”开头的数字字符串并以“|”结尾。对于某些行,这可能意味着多达 5 个 gi 编号,而对于其他行,则只有 1 个。

我希望输出看起来像这样:

297848936,297338191

168010496

等等...

最佳答案

这是使用正则表达式对象的非常灵活的 VBA 答案。该函数的作用是提取它找到的每个子组匹配(括号内的内容),并用您想要的任何字符串分隔(默认为“,”)。您可以在此处找到有关正则表达式的信息:http://www.regular-expressions.info/

假设第一个字符串位于 A1 中,您可以这样调用它:

=RegexExtract(A1,"gi[|](\d+)[|]")

因为这会查找所有出现的“gi|”后跟一系列数字,然后是另一个“|”,对于您问题的第一行,这将为您提供以下结果:

297848936, 297338191

只需在列中运行此命令即可完成!

Function RegexExtract(ByVal text As String, _
ByVal extract_what As String, _
Optional separator As String = ", ") As String

Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
Dim i As Long, j As Long
Dim result As String

RE.pattern = extract_what
RE.Global = True
Set allMatches = RE.Execute(text)

For i = 0 To allMatches.count - 1
For j = 0 To allMatches.Item(i).submatches.count - 1
result = result & (separator & allMatches.Item(i).submatches.Item(j))
Next
Next

If Len(result) <> 0 Then
result = Right$(result, Len(result) - Len(separator))
End If

RegexExtract = result

End Function

关于excel - 如何提取文本字符串中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7086270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com