【问题标题】:How to match sth. "preceeded / followed by" something with regular expression?怎么搭配。 “之前/之后”带有正则表达式的东西?
【发布时间】:2016-09-19 11:52:03
【问题描述】:

我正在处理一个 Google 表格文档,我需要在其中操作字符串并提取其中的某些部分。这些字符串对字符具有以下形式:

广告名称:FOO_FOOBAR_DE_CH_Zagreb+N1_970x250.zip; 970x250

我需要提取两个“字段”:

  • 萨格勒布
  • 970x250

显然,第一个总是被 "\_""+" 包围,这让事情变得更容易一些,另一个被 "_""." 包围,或者如果我要在前面加上 "; "从字符串的末尾捕获它。

我正在尝试使用 Google 表格专有的 REGEXMATCH 公式 (read more about it here),但我一定是做错了什么。如果重要,Google 产品会使用 RE2 RegEx“风味”。

这是我目前所拥有的:

=REGEXEXTRACT(text, "(?:_)[A-Za-z]+(?:\+).*")

这个返回:

_萨格勒布+

所以我需要去掉“_”和“+”。我知道对于这种类型的操作(在某些字符之间提取文本)应该使用环视,但我仍然对这些很不熟悉。另外,我知道其中一些(最明显的是负面的后视)不适用于 JavaScript。

这是尝试 2:

=REGEXEXTRACT(text, ".*[A-Za-z]+(?=\+.*)")

这个只是抛出一个#REF 错误。我发现这两个资源对于学习 RegEx 非常宝贵:

但由于时间紧迫,我现在没能力详细研究这个。

【问题讨论】:

  • 仅供参考:我认为您需要使用 REGEXEXTRACT 来实际返回 文本,而不仅仅是 TRUE 或 FALSE。
  • 抱歉,我在 Q 中拼错了,我正在使用 REGEXEXTRACT。谢谢:)
  • 所以,你需要REGEXEXTRACTs,对吧?对于萨格勒布 - =REGEXEXTRACT(F15,"_([a-zA-Z]+)\+") 和分辨率,请尝试 =REGEXEXTRACT(F15,";\s*([0-9x]+)$")
  • 宾果游戏!这就对了。所以我实际上不需要使用LOOKAROUNDs?能不能这么简单,我简单的把我要抓的东西放在一个()里面,需要在抓包组前面或者后面放什么?
  • 是的,基本上就是这样。对于此类基本提取,可以利用捕获功能。仅当您必须限制更通用的模式或需要重叠匹配时,才需要前瞻。

标签: javascript regex google-sheets


【解决方案1】:

在 Google Speadsheets 中,您可以在需要从特定上下文中提取的文本周围使用捕获组。因此,只需将() 放在这些图案部分周围即可。

要获取Zagreb,请使用=REGEXEXTRACT(F15,"_([a-zA-Z]+)\+");要获取分辨率,请使用=REGEXEXTRACT(F15,";\s*([0-9x]+)$")

模式 1

  • _ - 刚刚匹配的下划线
  • ([a-zA-Z]+) - 捕获匹配一个或多个 ASCII 字母的组 1
  • \+ - 文字 +

模式 2

  • ;\s* - 一个 ; 和 0+ 个空格
  • ([0-9x]+) - 捕获组 1 匹配一个或多个数字或 x
  • $ - 在单元格内容的末尾。

在这两种情况下,您只能将子字符串捕获到第 1 组中。

更多关于capturing groups can be found here的信息。

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多