我正在尝试替换“Assigned Workgroup”和“)”之间的字符串“Business Service Management”(不带引号)。例如:
(KISHORE_TEST, "业务服务管理") 中的项目 AND (KISHORE_TEST,"业务服务管理", "帐户","BSM 自动化") 中的 "已分配工作组" OR ("BSM 自动化") 中的 "工作组" OR ("业务服务管理","BSM 自动化") 中的 "已分配工作组" OR ("BSM 自动化") 中的 "已分配工作组" 并且团队 = "业务服务管理"
正则表达式应该仅匹配:
- (KISHORE_TEST,“业务服务管理”,“帐户”,“BSM 自动化”)中的“已分配工作组”
- “已分配工作组” 位于(“业务服务管理”、“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
引用包含的捕获组商业服务管理以便替换它。