regex中灵活匹配

匹配的数据并不是规则的。
待处理数据文本-》比如:

h|aaaaaaaaaa| k/kkk/ e/eeeee/
h|bbbbbbbbbb| k/oooooo/ e/rrrrrr/
h|cccccccccc| k/pppppp/ e/qqqqqq/

#数据中‘h|’ ‘k/’ 'e/'是字段名称,下面的情况

数据大概是这样的,然后写了下面的regex

h\|(.*?)\|\sk\/(.*?)\/\se\/(.*?)\/

但在测试中发现,有些数据:

情况(1):h|aaaaaaaaaa| k/kkk/ #只存在k/ 
情况(2):h|aaaaaaaaaa| #k/和e/都不存在
情况(3):h|aaaaaaaaaa| k/kkk/ 其他信息不确定的数据长度 e/eeeee/ # k/和e/中存在其他字段

像上述三种情况,如何才能使上述的正则能匹配到呢?或者还是需要怎么修改呢?谢谢~

阅读 2.5k
2 个回答
// 不太明白题主具体需求是什么,用什么语言,我用JS写了下。可供参考。
var reg = /h\|\w*\|\s*(?:\w*\/\w*\/)?(?:\s*\w*\s*\e\/e*\/)?/;
var str1 = 'h|aaaaaaaaaa| k/kkk/';
var str2 = 'h|aaaaaaaaaa|';
var str3 = 'h|aaaaaaaaaa| k/kkk/ waeasa3211 e/eeeee/';
console.log(reg.test(str1)); // true
console.log(reg.test(str2)); // true
console.log(reg.test(str3)); // true

可以在线正则测试网址试一下

楼主的表述有点不清楚,我猜想是还能匹配情况1, 2,3
那么h|aaaaaaaaaaaa|是必须的,后面的都是可选的
这种情况下把后面的k/kkk和e/eeeee/都用括号括起来,再加上?
h|(.?)|(sk/k+/)?(s*e/e+/)?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏