如何在Google表单中捕获所有带有点后跟空格的组,而不是由两个给定字符串组成的Regex?

qnzebej0  于 2023-10-22  发布在  Go
关注(0)|答案(3)|浏览(125)

我找不到重复的问题。
我需要捕获period后面跟着a space的组。但只有那些不被这两个字符串所预示的组:ZnZns
我测试了这个:

[^Z][^n](\.\s)

https://regex101.com/r/ARZxAV/1
还有这个

([^Z][^n]|[^Z][^n][^s])(\.\s)

https://regex101.com/r/cvEUKM/1
还有这个

(?!Zn)(\.\s)

https://regex101.com/r/IUZeso/1
在该样本上:

1) aaa. Zn. bbb
2) aaa. Zn. bbb.
3) aaa Zn. bbb.
4) aaa Zn. bbb
5) aaa Bns. bbb
6) aaa Bns. Bbb
7) aaa Zn. Aaa Bns. Bbb
8) 1
9) aaa
10) aaa.
11) aaa Abbb
12) aaa. Zns. bbb
13) aaa. Zns. bbb.
14) aaa Zns. bbb.
15) aaa Zns. bbb

如何从上面的示例中只捕获a.b.s.(示例中的aaa.bbb.Bns.组)组,不包括Zn.Zns.
样本的预期输出(粗体):
1.* Zn. BBB
1.* Zn. bbb.

  1. Zn.bbb.
    1.锌bbb
    1.**Bns.**bbb
    1.Bns.Bbb
    1.锌Aaa
    Bns
    Bbb
  2. 1
  3. AAA
    1.我知道了
    1.阿博
    1.我的天BBB
    1.我的天bbb.
  4. Zns.bbb.
  5. Zns. bbb
8qgya5xd

8qgya5xd1#

  • non-regex公式**Sheets**:*
=let(Σ,split(A2," "),
 ifna(filter(Σ,right(Σ)=".",iserror(xmatch(Σ,{"Zn.","Zns."})))))
    • 如果希望所有输出组都容纳在单个单元格中,请使用join() *

  • arrayformula样式 *:
=map(A2:A,lambda(Λ,if(Λ="",,let(Σ,split(Λ," "),join(" ",ifna(filter(Σ,right(Σ)=".",iserror(xmatch(Σ,{"Zn.","Zns."})))))))))

j9per5c4

j9per5c42#

你可以使用正则表达式和自定义函数。

\b(?!Zns?\b)[a-zA-Z]+\.\s

模式匹配:

  • \b防止部分匹配的字边界
  • (?!Zns?\b)负向前看,不直接向右侧AssertZnZns
  • [a-zA-Z]+匹配1+字符a-zA-Z
  • \.\s匹配.和一个空格字符(也可以匹配一个换行符)

参见regex demo
举例来说:

function myFunction(input) {
    const regex = /\b(?!Zns?\b)[a-zA-Z]+\.\s/g;
    const res = Array.from(input.matchAll(regex), m => m[0]);
    return res.length ? [res] : [[""]];
}

new9mtju

new9mtju3#

这里有另一个解决方案

=ARRAYFORMULA(SPLIT(REGEXREPLACE(A1:A15,"Zns?\.|([A-Za-z]+\.)|.","$1 ")," "))

相关问题