【问题标题】:Find differences between two strings with regex使用正则表达式查找两个字符串之间的差异
【发布时间】:2017-01-04 05:32:33
【问题描述】:

我收到了两个示例输入字符串:

“在德国入侵后,俄罗斯在 [A] [B] 中加入了二战”

“德国入侵后,俄罗斯于 1941 年 9 月加入二战”

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

如何使用正则表达式匹配“September”和“1941”?

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

我对解决方案的想法

我猜解决方案是这样的:

'在字符串 1 中 [A] 之前的所有内容之后和字符串 1 中 [A] 之后的所有内容之前匹配字符串 2 中的所有内容。

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

【问题讨论】:

  • 你可以和(?:\s*\[[^\]]*])+分开
  • 用\S+替换占位符,并在正则表达式的开头和结尾分别添加^和$锚。
  • @revo 谢谢,但我不关注。可以举个例子吗?

标签: regex


【解决方案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]);

【讨论】:

  • 谢谢,但我需要在单个正则表达式中匹配每个占位符,而不是多个步骤。我怀疑正确的答案是“Regex 无法做到这一点”。
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2010-11-27
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多