【问题标题】:Trying to Extract the Words after the Specific Value in a cell尝试在单元格中的特定值之后提取单词
【发布时间】:2021-03-29 18:32:07
【问题描述】:

我一直在尝试使用 REGEX 提取此 DONE=> 符号之后的单词。但它不起作用。

我们将非常感谢您的帮助。

我已经尝试过这些公式,但它不起作用

=TRIM(REGEXEXTRACT(A3," => \ +$"))

=ArrayFormula(IFERROR(REGEXEXTRACT(A3:A,"^\*\*\*\ DONE=> - (.* )? ")))

数据

KIM - 2021 COMPLETE - OLAP - 03-01-2021...DONE=> APWC 02-2021, BCMOI 02-2021, QAF 02-2021, PPN 02-2021,

结果会是这样。

APWC 02-2021, BCMOI 02-2021, QAF 02-2021, PPN 02-2021

【问题讨论】:

    标签: regex google-sheets google-sheets-formula


    【解决方案1】:

    你可以使用

    REGEXEXTRACT(A3:A, "DONE=>\s*(.+)\b")
    

    regex demo

    详情

    • DONE=> - 一个字符串
    • \s* - 零个或多个空格
    • (.+) - 第 1 组(此组值为返回值):除换行符之外的任何零个或多个字符,尽可能多
    • \b - 单词边界(修剪右侧标点符号)。

    【讨论】:

    • 非常感谢。如果我想在开头包含DONE=>,请多支持一个结果DONE=> APWC 02-2021, BCMOI 02-2021, QAF 02-2021, PPN 02-2021 是否可能。
    • @Mento 是的,只是去掉括号,"DONE=>\s*.+\b"
    【解决方案2】:

    这里有几个带有烫发链接的解决方案。文件/屏幕截图。

    A) 正则表达式 - re2(表格)

    有关文件关联,请参阅here。上面有截图。

    B) 中间/搜索公式

    =Mid(B4,search($C$3,B4)+len($C$3)+1,len(B4))
    

    地点:

    • 第一个“数据”点位于单元格 B4 中(即您提供的句子“KIM - 2021 COMPLETE - OLAP - 03-01-2021...DONE=> APWC....”
    • 单元格 C3 中所需的“触发”词(例如“DONE=>”) - 您可以将其更改为您希望的任何内容(仅选取第一次出现,并将其后的所有内容作为 req 返回。
    • 返回的文本:C 列(单元格 C4 中的第一个结果)

    工作原理

    1. Mid(target,a,b) 从 target 单元格中的文本返回 b 个字符,从 'ath' 位置的字符开始
    2. 例如with target = "Hello", a = 2 and b = 3, Mid("Hello",2,3) = "ell"(不带引号)
    3. 对于您的情况,使用 a = search("DONE=>") 从该点(单词开头)返回文本,因此 a = search("DONE=>")+ len("DONE=>") + 1 应该将结果字符串的第一个字符放置在第一次出现单词“DONE=>”之后立即返回
    4. len(string) 只返回定义为字符串的变量的长度。例如。 len("Hello") = 5。由于“DONE=>”后面的字符数不可能超过原始文本中的字符总数(即您的“数据”),Excel会自动限制最大可用字符,因此您可以放心,“DONE=>”之后的所有字符都会返回(假设该词在数据中出现)
    5. Iferror 和 Trim 只是为了确保结果更清晰(例如,缺少“DONE=>”、多余的空格字符等)

    截图

    Formulation of mid / search example

    C) 正则表达式变体

    工作表将 re2 用于正则表达式。普通的 RegEx 应该是这样的:

    (DONE=>\K)..+
    

    参见here(永久链接可用于转换为 python/java 等)。例如。在 Python 中,这将按如下方式工作:

    # coding=utf8
    # the above tag defines encoding for this document and is for Python 2.x compatibility
    
    import re
    
    regex = r"(DONE=>\K)..+"
    
    test_str = "KIM - 2021 COMPLETE - OLAP - 03-01-2021...DONE=> APWC 02-2021, BCMOI 02-2021, QAF 02-2021, PPN 02-2021"
    
    matches = re.finditer(regex, test_str, re.MULTILINE)
    
    for matchNum, match in enumerate(matches, start=1):
        
        print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
        
        for groupNum in range(0, len(match.groups())):
            groupNum = groupNum + 1
            
            print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
    
    # Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
    

    D) 相关链接

    【讨论】:

    • 非常感谢@James 的回答和详细说明。
    • 感谢您的认可 - 我想如果我早点回到这个问题上,它会获得更多的支持:) 但是所有的好 - 无论如何都获得了社区知识 - 主要的事情...... !
    • 是的!感谢您出色地提供的回复,社区迟早会感激的。
    猜你喜欢
    • 2021-08-01
    • 1970-01-01
    • 2019-10-10
    • 2021-12-31
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多