向我提供了两个示例输入字符串:
“德国入侵后,俄罗斯已进入二战”
1941年9月德国入侵后,俄罗斯进入了二战
第一个字符串中的A和B之前、之后和之间可以有任何字符,并且可以有其他占位符,例如C等。每个占位符只能出现一次。
如何使用regex来匹配“9月”和“1941年”?
我需要在一个正则表达式中匹配每个占位符,而不是多个步骤。
在解决方案上我的想法
我猜解决方案是这样的:
“匹配字符串2中的所有内容,在字符串1中在A之前的所有内容之后,在字符串1中的A之后匹配所有的内容”。
我想出了(.*(:?\[A\]))和((:?\[A\]).*)在第一个字符串中A之前和之后获取文本的方法,但不知道如何使用它们来查看第二个字符串。也许我需要用某种分隔符将这两件事连接起来,并查看分隔符的两边?
发布于 2017-01-03 21:26:47
如果我正确理解了您的问题,您希望将[A]和[B]周围的片段匹配起来,以便在第二个项中搜索它们各自的值。你可以分两步完成。首先,您需要提取围绕[A]和[B]的术语。这可以通过以下正则表达式来完成:^(.*?)(\[A\])(.*?)(\[B\])(.*?)$。在第二步中,您需要从第一个正则表达式的结果中创建一个新的正则表达式。然后,三个匹配的组(圆括号中的值组成一个组)将是术语[A]和[B]周围的片段。然后,您需要从这三个片段中创建一个新的正则表达式。在这里,每种编程语言的实现都不同。在JavaScript中,匹配的对象可以用来创建一个新的正则表达式,如:new RegExp(matches1[1] + '(.*?)' + matches1[2] + '(.*?)' + matches1[3])。最后,您将得到这两个值的匹配。
这里的示例是用JavaScript:实现的。
var text1 = "Russia has entered the WWII in [A] [B] after german invasion";
var regex1 = new RegExp(/^(.*?)\[A\](.*?)\[B\](.*?)$/);
var matches1 = text1.match(regex1);
var text2 = "Russia has entered the WWII in September 1941 after german invasion";
var regex2 = new RegExp(matches1[1] + '(.*?)' + matches1[2] + '(.*?)' + matches1[3]);
var matches2 = text2.match(regex2);
console.log(matches2[1]);
console.log(matches2[2]);
https://stackoverflow.com/questions/40112238
复制相似问题