【发布时间】:2017-05-01 20:49:49
【问题描述】:
我正在尝试逐行解析一些文件并尝试将其识别为列。连续的两列是单词,但分隔模式不止一个空格。由于列之间可以有空格,因此我在将这两者分开时遇到了一些麻烦。
行示例:
2236 ARGEMIRO PATROCINIO ARGEMIRO I I UBC 3,8462
1150721 ZACHARY F CONDON ZACH CONDON I I FINTAGE 8,3333
50300 COMERCIAL FONOGRAFICA RGE LTDA. PF LI ABRAMUS 25,0000`
(固定)
obs.:它没有显示 '2236'、'ARGEMIRO 之间的所有空格 PATROCINIO'、'ARGEMIRO'、'I'、'I'、'UBC' 和 '3,8462'
我正在使用这个正则表达式:
(\d+)\s+([\.a-zA-Z\s,'À-úÀ-ÿ()\?\-\/\d]+)\s{2,}([\.a-zA-Z\s,'À-úÀ-ÿ()\?\-\/\d]+)\s{2,}(I|PF|MA)\s{2,}(I|PF|PL|LI|MA|CV|MJ)\s{2,}(\w+)\s{2,}(\d+,\d{4})
但不幸的是,“ARGEMIRO PATROCINIO”将与第二个“ARGEMIRO”一起出现; "ZACHARY F CONDON" 和第二个 "ZACH CONDON" 等等。
所以,
- 如何修复这个正则表达式来分隔这两个“列”?
- 另一个正则表达式如何能够在这 7 列中的两个或多个空格之间抓取任何内容?
谢谢!
【问题讨论】:
-
preg_split('/\s+/',..? -
我认为
preg_split看起来比this "fix" 更整洁。 -
@WiktorStribiżew 为什么要放这两个“?”正则表达式开始工作? preg_split 做得很好,但是这个正则表达式维护了列结构,所以我可以检测我正在读取什么类型的数据。你可以解释吗?也许作为答案?
-
我想你也在使用
/U修饰符,对吧?它逆转了贪婪。因此,当您将*?或+?与/U一起使用时,它们实际上是贪婪。