我有一个字符串查询,我想匹配并提取特定的单词。
当我有这个词时word.EXACT
提取这个词的容器
赞MESH.EXACT("blood glucose monitoring")
提取单词"blood glucose monitoring"
"N-Words"
N-Words
Query_Input= (EMB.EXACT("insulin treatment")) and (MESH.EXACT("blood glucose monitoring")) OR "Self-Monitoring of Blood Glucose”
输出必须像那样
Query_out = "insulin treatment" "blood glucose monitoring" "Self-Monitoring of Blood Glucose”
这个Demo有我的正则表达式和我的正则表达式:https://regex101.com/r/rqpmXr/15
答案 0 :(得分:1)
你可以这样做:
(?<=\w\.EXACT\()[^)]+
请参阅regex demo。匹配任何不是右括号[^)]+
的字符,仅在前面有\w\.EXACT(
的情况下匹配。
如果你想要替换,你可以捕获上面的匹配并使用\1
(注意尾随空格)进行重新定位:
.*(?<=\w\.EXACT\()([^)]+).*\n|.*
如下所示:https://regex101.com/r/BS3nwr/4
编辑:在其中一条评论中引起我的注意,一些网络浏览器不支持后视(?<=
),所以你可以使用(注意这个正则表达式比较慢(需要更多步骤)前一个):
\w+\.EXACT\(([^)]+).*\n|.*?
答案 1 :(得分:1)
您可以使用
/\w+\.EXACT\(([^)]*)\)/g
并替换为$1
,占位符包含第1组值。请参阅regex demo。
模式详情
\w+
- 一个或多个单词字符\.EXACT\(
- 文字.EXACT(
子字符串([^)]*)
- 第1组:)
以外的任何0 +字符(如果您需要确保保持在{{1}的1组内,可以使用[^()]*
})(...)
- \)
字符。参见JS演示:
)
var s = 'MESH.EXACT("blood glucose monitoring") words tt.EXACT("blood glucose monitoring") ';
var rx = /\w+\.EXACT\(([^)]*)\)/g;
document.querySelector("#result").innerHTML = s.replace(rx, "$1");
答案 2 :(得分:0)
答案 3 :(得分:0)
这是一个可执行的Javascript示例,它从您指定的输入中提取您指定的输出:
let input = "(EMB.EXACT(\"insulin treatment\")) and (MESH.EXACT(\"blood glucose monitoring\")) OR \"Self-Monitoring of Blood Glucose\"";
let re = /(?:EXACT\(("[^"]+")\)|OR\s*("[^"]+"))/g;
let Query_out = [];
while ((match = re.exec(input)) !== null) {
Query_out.push(match[1] ? match[1] : match[2]);
}
console.log(Query_out.join(" "));