首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用regex查找两个字符串之间的差异

用regex查找两个字符串之间的差异
EN

Stack Overflow用户
提问于 2016-10-18 15:27:27
回答 1查看 2.3K关注 0票数 1

向我提供了两个示例输入字符串:

“德国入侵后,俄罗斯已进入二战”

1941年9月德国入侵后,俄罗斯进入了二战

第一个字符串中的A和B之前、之后和之间可以有任何字符,并且可以有其他占位符,例如C等。每个占位符只能出现一次。

如何使用regex来匹配“9月”和“1941年”?

我需要在一个正则表达式中匹配每个占位符,而不是多个步骤。

在解决方案上我的想法

我猜解决方案是这样的:

“匹配字符串2中的所有内容,在字符串1中在A之前的所有内容之后,在字符串1中的A之后匹配所有的内容”。

我想出了(.*(:?\[A\]))((:?\[A\]).*)在第一个字符串中A之前和之后获取文本的方法,但不知道如何使用它们来查看第二个字符串。也许我需要用某种分隔符将这两件事连接起来,并查看分隔符的两边?

EN

回答 1

Stack Overflow用户

发布于 2017-01-03 21:26:47

如果我正确理解了您的问题,您希望将[A][B]周围的片段匹配起来,以便在第二个项中搜索它们各自的值。你可以分两步完成。首先,您需要提取围绕[A][B]的术语。这可以通过以下正则表达式来完成:^(.*?)(\[A\])(.*?)(\[B\])(.*?)$。在第二步中,您需要从第一个正则表达式的结果中创建一个新的正则表达式。然后,三个匹配的组(圆括号中的值组成一个组)将是术语[A][B]周围的片段。然后,您需要从这三个片段中创建一个新的正则表达式。在这里,每种编程语言的实现都不同。在JavaScript中,匹配的对象可以用来创建一个新的正则表达式,如:new RegExp(matches1[1] + '(.*?)' + matches1[2] + '(.*?)' + matches1[3])。最后,您将得到这两个值的匹配。

这里的示例是用JavaScript:实现的。

代码语言: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]);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40112238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档