我正在使用python regex来读取文档。
我在很多文档中都有下面这一行:
Dated: February 4, 2011 THE REAL COMPANY, INC我可以使用python文本搜索来轻松地找到带有“日期”的行,但我想从文本中提取真正的公司,公司,而不是获得“2011年2月4日”文本。
我尝试过以下几种方法:
[A-Z\s]{3,}.*INC我对这个正则表达式的理解是,它应该让我在LLP之前得到所有的大写字母和空格,但它却拉出了整个行。
这表明我从根本上忽略了正则表达式如何处理大写字母。有没有什么简单明了的解释我漏掉了?
发布于 2018-10-22 02:29:19
使用下面的代码:
>>> import re
>>> txt
'Dated: February 4, 2011 THE REAL COMPANY, INC'
>>> re.findall('([A-Z][A-Z]+)', txt)
['THE', 'REAL', 'COMPANY', 'INC']另一种方法是@davedwards建议的:
>>> re.findall('[A-Z\s]{3,}.*', txt)
[' THE REAL COMPANY, INC']说明:
A-Z\s{3,}.*匹配以下列表中存在的单个字符A-Z\s{3,} {3,}量词-匹配3到无限次,尽可能多,按需返回(贪婪) A-Z A-Z A(索引65)和Z(索引90) (区分大小写)范围内的单个字符\s匹配任何空白字符(等于\r\n\t\f\v )量词匹配任何字符(行终止符除外)* .* -匹配0到无限次,尽可能多次,根据需要返回(贪婪)量词
发布于 2018-10-22 03:43:24
你可以使用
^Dated:.*?\s([A-Z ,]{3,})并利用第一个捕获组,请参见。
发布于 2018-10-22 20:59:38
您的正则表达式[A-Z\s]{3,}.*INC匹配大写字符或空白字符3次或更多次,然后是0+,再乘以任何字符,然后是将匹配的INC:THE REAL COMPANY, INC
您还可以做的是匹配日期:从字符串的开头开始,然后是类似日期的格式,然后捕获组中后面的内容。您的值将在第一个捕获组中:
^Dated:\s+\S+\s+\d{1,2},\s+\d{4}\s+(.*)$
说明
^Dated:\s+匹配日期:依次为空格character\S+\s+匹配日期为1+,空格为非空格字符,后跟1+为空格字符,在此case\d{1,2},匹配中为2月1-2次digit\s+\d{4}\s+匹配character(.*)为空格字符(4位),然后为1+为空格character(.*)组中的空格character$捕获时间0+任何字符串的末尾https://stackoverflow.com/questions/52918006
复制相似问题