1

在 Dynatrace 中,有些 URL 包含动态的单词。想要使用正则表达式从 URL 中删除该动态词

以下是不同的网址

  • /aaa/fdsadx/drtyu/ ab_cd /myword?Id=953
  • /asd/XXXXX/sadsa/two/ xx_yy ?Id=953
  • /asd/fdsadx/df/三/ pp_qq /myword
  • /asd/fdsadx/sadsa/ ab_cd
  • /SSS/fdsadx/cvnm/forth/ gg_hh

预期产出

  • /asd/fdsadx/sadsa//myword?Id=953
  • /asd/fdsadx/sadsa/?Id=953
  • /asd/fdsadx/sadsa//我的字
  • /asd/fdsadx/sadsa/

我能够管理这个正则表达式

(\S+?)ab_cd(.*)

但它不适用于动态值和所有 URL。如何改进正则表达式以删除动态值?

4

2 回答 2

2

您可以使用 2 个捕获组并在匹配正斜杠后匹配下划线部分

^(\S+/)[^\s_]+_[^\s_/?]+(.*)
  • ^字符串的开始
  • (\S+/)捕获组 1,匹配 1+ 次非空白字符,后跟/
  • [^\s_]+匹配除空白字符以外的任何字符的 1 次以上或_
  • _从字面上匹配
  • [^\s_/?]+匹配除空白字符 _/?
  • (.*)捕获组 2匹配除换行符以外的任何字符 0+ 次

正则表达式演示

例如,在替换中使用 2 个捕获组$1$2

如果您想匹配国家/地区代码并且您知道它们例如由字符 a-zA-Z 组成,您可以使字符类更具体

^(\S+/)[A-Za-z]+_[A-Za-z]+(.*)

正则表达式演示

于 2019-09-30T14:36:58.440 回答
1

似乎第一部分是固定的,并且您正在修剪“/”或“?”之后的所有内容。鉴于此,也许你想要类似的东西:

s/(\/asd\/fdsadx\/sadsa\/)[^/?]+(.*)/\1\2/

这将在 \1 中捕获头部,忽略一组不是“\”或“?”的字符,并在 \2 中捕获尾部。

于 2019-09-30T14:33:36.097 回答