正则表达式仅查找字符串和括号之间的特定字符串

正则表达式仅查找字符串和括号之间的特定字符串

我正在尝试替换“Assigned Workgroup”和“)”之间的字符串“Business Service Management”(不带引号)。例如:

(KISHORE_TEST, "业务服务管理") 中的项目 AND (KISHORE_TEST,"业务服务管理", "帐户","BSM 自动化") 中的 "已分配工作组" OR ("BSM 自动化") 中的 "工作组" OR ("业务服务管理","BSM 自动化") 中的 "已分配工作组" OR ("BSM 自动化") 中的 "已分配工作组" 并且团队 = "业务服务管理"

正则表达式应该仅匹配:

  1. (KISHORE_TEST,“业务服务管理”,“帐户”,“BSM 自动化”)中的“已分配工作组”
  2. “已分配工作组” 位于(“业务服务管理”、“BSM 自动化”)

应省略不在上述模式之间的所有其他“业务服务管理”的出现。

我只是想出了(?<=Assigned Workgroup)(.*?)(\w*Business Service Management*\w)(.*?)\)我知道是错误的,但我对正则表达式不熟悉,所以无法想出正确的答案。

我可以在此请求你的帮助吗?

答案1

这个做的工作:

Assigned Workgroup.*?"\KBusiness Service Management(?="[^)]*\))

解释:

Assigned Workgroup              : literally
.*?                             : 0 or more any character, not greedy
"                               : a double quote
\K                              : forget all we have seen until this position
Business Service Management     : literally
(?=                             : positive lookahead
  "                             : a double quote
  [^)]*                         : 0 or more anyy character that is not a close parenthesis
  \)                            : a close parenthesis
)                               : end lookahead

用法:

使用 perl

my $str = <<EOD;
project in (KISHORE_TEST, "Business Service Management") AND "Assigned Workgroup" in (KISHORE_TEST,"Business Service Management", "Account","BSM Automation") OR "Workgroup" in ("BSM Automation") OR "Assigned Workgroup" in ("Business Service Management","BSM Automation") OR "Assigned Workgroup" in ("BSM Automation") and team = "Business Service Management"
EOD

$str =~ s/Assigned Workgroup.*?"\KBusiness Service Management(?="[^)]*\))/new_string/g;
say $str;

输出:

(KISHORE_TEST, "Business Service Management") 中的项目 AND (KISHORE_TEST,"new_string", "Account","BSM Automation") 中的“已分配工作组” OR ("BSM Automation") 中的“工作组” OR ("new_string","BSM Automation") 中的“已分配工作组” OR ("BSM Automation") 中的“已分配工作组” 并且团队 = "Business Service Management"

这将与 php 和 Notepad++ 以及许多使用 PCRE 正则表达式风格的语言/工具一起使用。


如果您在环视方面遇到一些困难,您可以使用:

  • 寻找:(Assigned Workgroup.*?")Business Service Management("[^)]*\))
  • 代替:$1new_string$2

答案2

这不是最好的解决方案,但你可能想尝试一下

(?<="Assigned Workgroup" in \()["?\w"?|,]*\"(Business Service Management)

你可以继续完善regex101。然后您需要使用\1$1引用包含的捕获组商业服务管理以便替换它。

相关内容