如何为下面的模式生成正则表达式?

时间:2019-02-13 16:15:43

标签: regex

我在正则表达式之类的问题上一直很头疼。

我有一个具有以下模式的文本文件:

  

$〜$ xxxx $〜$ | $〜$ xxxx $〜$ | $〜$ xxxx $〜$ | $〜$ xxxx $〜$ | $〜$ xxxx $〜$ | $〜$ xxxx $〜$ | $〜$ xxxx   $〜$ | $〜$ xxxx $〜$ | $〜$ xxxx $〜$ | $〜$$$$ | $〜$ xxxx $〜$ | $〜$$$$ | $〜$$〜$ | $ 〜$$$$ | $〜$$〜$ | $〜$ xxxx $〜$ | $〜$$〜$

您可以看到$〜$是n个字段的填充,以$〜$结尾,字段定界符为|,某些字段为空($〜$$〜$),否则xxxx是该字段的内容。 / p>

我试图构建一个正则表达式来匹配此模式,但停留在第一个字段:

^\$~\$[a-z|A-Z|_]+\$~\$\|

有人可以帮忙吗?非常感谢你。

更新:

在要处理的数据中,应该恰好有17个字段,并且每个字段都被$〜$包围,并用|作为分隔符,在极少数情况下,数据有误,我需要将mal-形成线。您能进一步启发我该怎么做吗?谢谢。

UPDATE2:

感谢@Curious_Mind用于https://regex101.com/r/fsp3FS/13,几乎在那儿,但是当我针对它进行检查时:

$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$$~$|$~$xxxx$~$|$~$$~$|$~$$~$|$~$$~$|$~$$~$|$~$xxxx$~$|$~$$~$

$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$xxxx$~$|$~$$~$|$~$xxxx$~$|$~$$~$|$~$$~$||$~$$~$|$~$$~$|$~$xxxx$~$||$~$$~$

第二行确实是格式错误的行:出现“ ||”,该模式应严格匹配: 1.用$〜$对填充的17个字段 2.所有字段均以“ |”分隔

所有不匹配的行都将被regex排除,稍后,我将在Unix中使用此regex来提取数据。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

只需删除初始的^插入符号,然后将您的匹配项括在括号()中,就可以轻松获取字符串。让我们这样尝试吧-

\$~\$([a-z|A-Z|_]+)\$~\$\|

正则表达式: https://regex101.com/r/fsp3FS/11

编辑:作为OP注释,我想您可以在之后使用([a-z|A-Z|_]+)使组|和管道?成为可选项。