我在正则表达式之类的问题上一直很头疼。
我有一个具有以下模式的文本文件:
$〜$ 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来提取数据。
非常感谢您。
答案 0 :(得分:0)
只需删除初始的^
插入符号,然后将您的匹配项括在括号()
中,就可以轻松获取字符串。让我们这样尝试吧-
\$~\$([a-z|A-Z|_]+)\$~\$\|
正则表达式: https://regex101.com/r/fsp3FS/11
编辑:作为OP注释,我想您可以在之后使用([a-z|A-Z|_]+)
使组|
和管道?
成为可选项。