【问题标题】:RegEx - if then else正则表达式 - 如果则不然
【发布时间】:2020-01-23 17:53:38
【问题描述】:

我正在尝试制定一个正则表达式,但遇到了条件问题。我有 100 个如下所示的 URL 列表:

  1. /name/something/details/55334
  2. /name/page/1/2
  3. /name/somethingdifferent/34523
  4. /name/page/1
  5. /name/something/553/1

底线是,当数字出现时,除了数字之前的最后一件事是单词“页面”的情况之外,我想删除所有内容。

1. /name/something/details/
2. /name/page/1/2
3. /name/somethingdifferent/
4. /name/page/1
5. /name/something

我将使用 Google Analytics 内容分组或可能使用 DataStudio 将其删除。我已经删除了 /name/ 所以我有:

1. /something/details/55334
2. /page/1/2
3. /somethingdifferent/34523
4. /page/1
5. /something/553/1

但想添加另一个规则并删除数字所以我得到:

1. /something/details/
2. /page/1/2
3. /somethingdifferent/
4. /page/1
5. /something

已经试过了:

\(?(?=(page\/[0-9]+))(\2)|(\/\d+)

遵循以下语法:

(?(?=condition))(IF)|(ELSE)

但它会突出显示文本后的所有数字。

感谢您的帮助。

sampak

【问题讨论】:

  • 第5个应该是/something还是/something/
  • 对不起,应该是 /something/
  • 我建议的模式有效吗?

标签: regex url google-analytics grouping


【解决方案1】:

试试^(\/page.*|[^0-9]*),使用你的例子。

一个版本,包括。姓名:^(page[\/\d]*|[^\d\s])*

【讨论】:

  • 如何让它只匹配文本后面的数字?如果我想在 Google Analytics 中添加提取规则,您的解决方案可以很好地包含除数字之外的任何内容,因此我可能会提取 /name/ 以及除页面之外的任何内容之后的数字,或者只是页面之后的数字。谢谢
  • 你能写一个小例子吗?输入和预期输出,目前我不明白你想对我说什么。
【解决方案2】:

一个选项可能是在不匹配 /page 时不匹配空格或数字。

然后匹配正斜杠和 1+ 位数字后跟任何字符 0+ 次以从结果中省略它。

^((?:(?!\/page)[^\d\s])*\/)\d.*

部分

  • ^ 字符串开始
  • ( 捕获第 1 组
    • (?:非捕获组
      • (?!\/page) 负前瞻,断言右边的不是
      • [^\d\s] 匹配除数字或空白字符以外的任何字符
    • )*关闭非捕获组并重复0+次
    • \/匹配/
  • )关闭第一组
  • \d.* 匹配一个数字后跟除换行符以外的任何字符 0+ 次

在替换中使用第一个捕获组

Regex demo

如果您还想删除 /name,您可以使用:

^\/name((?:(?!\/page)[^\d\s])*\/)\d.*

Regex demo

【讨论】:

  • 当我用 www.regextester.com 检查它时,它会突出显示整行而不是仅显示页面不存在的行中的数字。
  • @user3015289 没错,但您应该将匹配项替换为第一个捕获组。在这个演示链接regex101.com/r/gRbbjr/1,您可以看到第一个捕获组以绿色突出显示,这将是替换。
  • Google Analytics 会这样理解它吗?如果是,那么我会将您的答案标记为正确
  • @user3015289 我明白你的意思了。我认为谷歌分析regex 不支持负前瞻(?! 你能用这种模式测试它并在替换中仍然使用组 1 吗? ^\/name(.*\/page\/[0-9].*|[^0-9]+).*regex101.com/r/nLXv8z/1
  • 我用它来删除实际上是任何字符串的名称,名称只是一个示例:/[-a-zA-Z]+/(.*) 然后它将后面的所有内容分组,我想去掉一些出现在 URL 末尾的 ID - 让您更好地理解
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
  • 2018-03-21
  • 2016-08-04
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
相关资源
最近更新 更多