繁体   English   中英

Python中的正则表达式与回车符匹配

[英]Regular Expression Matching with Carriage Returns in Python

我有以下数据,并希望匹配某些字符串,如下所述。

FTUS80 KWBC 081454 AAA\r\r TAF AMD   #should match 'AAA'
LTUS41 KCTP 082111 RR3\r\r TMLLNS\r  #should match 'RR3' and 'TMLLNS'
SRUS55 KSLC 082010\r\r HM5SLC\r\r    #should match 'HM5SLC'
SRUS55 KSLC 082010\r\r SIGC  \r\r    #should match 'SIGC  ' including whitespace

我需要满足以下条件。 但是,当我将它们放在一起时它不起作用,所以我知道我有错误。 提前致谢。

  • 6位数字字符串后开始匹配:(?<= \\ d {6})
  • 如果3个字符混合使用大写字母/数字且在前两个回车符之前返回,则匹配:([A-Z0-9] {3})(?= \\ r)
  • 如果在回车后混合了6个字符的大写字母/数字,则匹配:(?<= \\ r \\ r [A-Z0-9] {6})
  • 如果包含4个字符和两个空格,则匹配:([A-Z0-9] {4})

可能有一种更优雅的方法,但是您可以执行以下操作:

(?:\d{6}\s?)([A-Z\d]{3})?(?:[\r\n]{2}\s)([A-Z\d]{6}|[A-Z\d]{4}\s{2})?
  • (?:\\d{6}\\s?)未捕获的6位数字组,后跟一个可选空格
  • ([AZ\\d]{3})? 可选的捕获组,每组3个大写字母/数字
  • (?:[\\r\\n]{2}\\s)未捕获的两组行尾,后跟1个空格
  • ([AZ\\d]{6}|[AZ\\d]{4}\\s{2})? 可选的捕获组,包含6个大写字母/数字或4个大写字母/数字,后跟2个空格

目前尚不清楚这行的结尾是什么,但是假设它是Unix的\\n ,以下表达式将按要求捕获字符串(添加双引号以显示空白)

sed -rne 's/^.{18} ?([A-Z0-9]{3,3})?\r{2}?([^\r]+)?\r.*$/"\1\2"/p' text.txt

结果

"AAA"
"RR3 TMLLNS"
" HM5SLC"
" SIGC  "
  • .{18}前18个字符
  • ?([A-Z0-9]{3,3})? 匹配AAA或RR3,不带空格
  • \\r{2}?([^\\r]+)?\\rTMLLNSHM5SLCSIGC匹配, HM5SLC 2个\\r和后跟1个\\r字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM