数据:
N15319542045C13_1_3/61488007C13-130083_1_3/61488007C13-130083-1_1_3/P1197443641_1_3SD|1
NP1196939393_1_3SU|OD=2/7;|BNP1196939393_1_3SU|OD=2/7;|BNP1196930222_1_3SU|OD=4/11;|
NP1196930222_1_3SU|OD=4/11;|
N15319384625C13_1_3/61445794C13-130077_1_3SD||BN15319384625C13_1_3/61445794C13-130077_1_3SD||
正则表达式:
(N(.*?)S([UID])\|(.*?))(?:B|\|.?$)
我试图使用上面的正则表达式找到7个匹配,但只有6匹配。不知道如何修复以匹配第一行。
格式:
N(key)S(action)|(value or end)
结束取决于不同的比赛
如果有其他人需要我解决了它:
(\x15(.*?)\x01([UID])\|(.*?))(?:.*?\x08|.*\|?$)
答案 0 :(得分:1)
正则表达式不起作用,因为根据正则表达式在S[UID]
期望2 |
后,但在第一个输入字符串中只有一个。
一个解决方法是使第二组可选,并移出字符串结束锚$
(N(.*?)S([UID])\|(.*?))(?:B|\|.?)?$
<强> Regex Demo 强>
<小时/> 或者可能更简单,如
N.*?S[UID]\|.*$
<强> Regex Demo 强>