【问题标题】:Regex to match if string contains 4 or more backslashes如果字符串包含 4 个或更多反斜杠,则匹配正则表达式
【发布时间】:2022-01-04 01:02:23
【问题描述】:

您好,对正则表达式非常陌生,但正在努力完成这项工作。

我在 Data Studio 中有一个包含页面 URL 的变量。我只需要在表格中保留一部分页面 - 那些包含 4 个或更多反斜杠的页面:

例如,这些 URL 应该在子集中:

  • /abc/state/region/place1
  • /abc/state/region/place1/details
  • /abc/territory/region/place2
  • /abc/state/region/place3/details/more-specific

而应排除这些 URL:

  • /abc/state/region
  • /abc
  • /abc/xyz-page

我认为像 \/{4,} 这样的东西会起作用,但它似乎没有返回任何结果

【问题讨论】:

    标签: regex google-data-studio


    【解决方案1】:

    首先,那些是斜线;反斜杠则相反 (\)。这很重要,因为反斜杠在编程语言中以各种语法方式使用,包括正则表达式:在特殊字符前面放置反斜杠会在它具有的任何特殊功能和正常匹配自身之间改变其含义。在正则表达式中,/ 并不特殊,因此您不必在其前面加上反斜杠(除非您使用的语言是正则表达式本身在整个外部由 /s 分隔,但由于您使用的是 Google Data Studio,我很确定正则表达式是作为纯字符串输入的。)

    其次,正则表达式/{4,} 仅匹配四个或更多斜线它们之间没有其他内容。所以它匹配////,但不匹配///hello/,等等。字符串中的所有内容——或者至少,正则表达式匹配的字符串部分中的所有内容——都必须在正则表达式中加以考虑。也许你可以尝试这样的事情:

    (?:[^/]*/[^/]*){4,}
    

    这将匹配四个或更多重复的“斜线之前和/或之后带有一些可选的非斜线”。请注意,这是一个部分正则表达式,专为 REGEXP_CONTAINS 之类的东西设计;它与整个字符串不匹配。如果你想把它变成你可以传递给REGEXP_MATCH的东西,只需在它的正面和背面加上一个.*

    .*(?:[^/]*/[^/]*){4,}.*
    

    请参阅https://github.com/google/re2/wiki/Syntax,了解 GDS 在其正则表达式中支持的内容。

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 2015-07-14
      • 1970-01-01
      • 2019-08-26
      • 2023-03-13
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多