组之间的正则表达式匹配文本匹配

时间:2018-10-17 05:40:51

标签: javascript python regex

我正在做一个正则表达式来分隔作为键:值文本输入与此类似

  

QA〜BlaBlaBlaWE〜1235123FA〜blablablaER〜blabla123ZX〜2342blaaa

我已经能够将其分开,但是当尝试将Group3作为键并将Group4作为值时

质量检查〜BlaBlaBla

它保留在Group2(QA)中,而Group3保留在值(BlaBlaBla)

我的正则表达式是这个

  

(((\ w {2}〜)?(。*?)(\ w {2}〜| $))

关键是能够创建这样的列表

> Key Value 
> QA BlaBlaBla 
> WE 1235123 
> FA blablabla 
> ER blabla123 
> ZX 2342blaaa

这是示例 https://regex101.com/r/Xh8RAA/1

我不能很好地创建正则表达式,以便所有内容都在Group3和Group4中,有人可以帮助我

3 个答案:

答案 0 :(得分:1)

您要查找的是 lookahead ,它将检查当前位置是否跟随某些模式,而不消耗模式中的字符。您还可以删除包含整个正则表达式的不必要捕获组,这样就可以使组1包含键,使组2包含值,而无需其他任何组。另外,由于密钥是必需的,因此密钥组不应是可选的:

(\w{2})~(.*?)(?=\w{2}~|$)

https://regex101.com/r/Xh8RAA/6

答案 1 :(得分:0)

您可以使用正向超前模式来避免消耗下一个标头令牌:

([A-Z]{2})~(.*?)(?=[A-Z]{2}~|$)

用第1组和第2组的匹配项替换后跟换行符,您将获得所需的输出。

演示:https://regex101.com/r/Xh8RAA/2

答案 2 :(得分:0)

您可以尝试以下Regular Expression

/.{2}~[^~]+((?=..~)|$)/g

在下面检查其结果:

console.log("QA~BlaBlaBlaWE~1235123FA~blablablaER~blabla123ZX~2342blaaa".match(/.{2}~[^~]+((?=..~)|$)/g));

使用以下代码,可以将其作为对象(key/val):

function CustomSplit(s){
  var r={};
  s.match(/(.{2})~([^~]+((?=..~)|$))/g).forEach(function(a){a=a.split("~"); r[a[0]]=a[1];});
  return r;	
}
console.log(CustomSplit("QA~BlaBlaBlaWE~1235123FA~blablablaER~blabla123ZX~2342blaaa"));