首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回匹配模式最后三个字符的正则表达式

返回匹配模式最后三个字符的正则表达式
EN

Stack Overflow用户
提问于 2019-03-25 15:20:40
回答 2查看 733关注 0票数 1

我使用grep搜索包含88个字符长的MRZ(机器可读区域)的文本文件。在文本文件中,它们的前面是分号。我只想从字符串中得到字符3-5的子字符串。

这是我的模式:

代码语言:javascript
复制
egrep --include *.txt -or . -e ";[A-Z][A-Z0-9<][A-Z<]{3}"

这是一个文本文件:

代码语言:javascript
复制
text is here;P<RUSIVAN<<DEL<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<F64D123456RUS7404124F131009734P41234<<<<<<<8  ;2019-02-08

这是我的输出:

代码语言:javascript
复制
;P<RUS

这是我想要的输出:

代码语言:javascript
复制
RUS

分号引入MRZ。它以大写字母开头,后面跟着大写字母、数字或填充字符<。然后按照3位国家代码,可以包含大写字母或填充字符<

这个模式工作得很好,但我只想要返回的是我正在量化的最后三个数字。是否有办法只获得匹配模式的最后3个字符?在示例文本文件中,所需的输出将是RUS。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-25 15:50:01

如果您可以使用Grep,您可以使用\K,它将不再包含匹配中的任何以前匹配的字符,然后匹配您的字符类3次:

代码语言:javascript
复制
grep -roP --include=*.txt ";[A-Z][A-Z0-9<]\K[A-Z<]{3}"
票数 1
EN

Stack Overflow用户

发布于 2019-03-25 15:42:08

你就想这么做吗?

代码语言:javascript
复制
$ awk -F';' '{print substr($2,3,3)}' file
RUS

$ sed -E 's/[^;]*;..(.{3}).*/\1/' file
RUS

如果没有,那么编辑您的问题,以提供更有代表性的样本输入/输出。

用于查找文件的UNIX命令名为find,顺便说一下,而不是grep。我知道guys为在grep中查找文件添加了许多选项,但不要使用它们,因为它们使grep命令不必要地复杂(并且与其他UNIX文本处理工具不一致),因为它需要find文件的参数以及文件中的g/re/p参数。因此,如果您使用grep,命令行应该是:

代码语言:javascript
复制
find . -name '*.txt' -exec grep 'stuff' {} +

不是:

代码语言:javascript
复制
egrep --include *.txt -or . -e 'stuff'

对任何其他工具也这样做:

代码语言:javascript
复制
find . -name '*.txt' -exec grep 'stuff' {} +
find . -name '*.txt' -exec sed  'stuff' {} +
find . -name '*.txt' -exec awk  'stuff' {} +
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55341097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档