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

2024-05-11 09:09:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个regex来分隔为key:value文本条目类似于

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

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

QA~废话

它保留在组2(QA)和组3中的值(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中有人可以帮助我


Tags: key文本列表value条目qaregex关键
3条回答

您可以使用正向先行模式来避免使用下一个标头标记:

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

用第1组和第2组替换匹配项,后面跟着一个换行符,您将得到所需的输出。在

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

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

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

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

你可以试试这个Regular Expression

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

检查结果如下:

和13;

和13;

使用下面的代码,您可以将其作为对象(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"));

和13;
和13;

相关问题 更多 >