我已经提供了两个示例输入字符串:
"俄罗斯在德国入侵后进入二战[A] [B]并且#34;
"俄罗斯在德国入侵后于1941年9月进入二战并且#34;
在第一个字符串中[A]和[B]之前,之后和之间可以有任何字符,并且可能有其他占位符,例如[C] [D]等。每个占位符只能出现一次。
我如何使用正则表达式匹配" 9月"和" 1941"?
我需要在单个正则表达式中匹配每个占位符,而不是多个步骤。
我对解决方案的想法
我猜测解决方案将是:
'匹配字符串2中的所有内容,在字符串1中的[A]之前的所有内容之前,以及在字符串1中的[A]之后的所有内容之前#39;
我想出(.*(:?\[A\]))
和((:?\[A\]).*)
来获取第一个字符串中[A]之前和之后的文字,但无法弄清楚如何使用它来查看第二个字符串串。也许我需要用某种分隔符连接这两个东西并查看分隔符的两边?
答案 0 :(得分:1)
如果我正确理解了您的问题,您希望匹配[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]);