在关键字之后和换行之前捕获文本

时间:2015-07-15 14:55:44

标签: python regex

我试图在关键字Company :之后一直捕到文本到行尾。我花了很多时间进行堆栈交换和在线正则表达式测试人员试图找到合适的组合。

我非常接近,但我的输出继续捕获新线。 Regex101.com声明。*?匹配任何字符(换行符除外)。我不知道为什么它一直在捕捉换行符。

以下是我正在搜索的文字片段:

  

blahblahblah \ n公司:BALDWIN LINE CONST of MD INC \ n联系人姓名:   STEVE SMITH传真:(000)000-0000 \ n联系电话:(000)000-0000 \ n

这是代码

sCompany = re.compile(r'(?<=Company : )(.+?)(?=Contact)')
m = re.search(sCompany,msgBody)

这是我的输出:

  

MD INC的BALDWIN LINE CONST \ n

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

import re
x = 'blahblahblah\nCompany : BALDWIN LINE CONST OF MD INC\nContact Name : STEVE SMITH Fax: (000)000-0000\nContact Phone: (000)000-0000\n'
print re.findall(r'Company.*', x)

输出:

['Company : BALDWIN LINE CONST OF MD INC']

我知道,您已经编辑了OP,所以如果您不想包含Company:,那么您需要Company:之后的文字,那么您可以这样做:

fromco = re.compile('Company :(.*)')
print fromco.search(x).group(1)

输出:

BALDWIN LINE CONST OF MD INC

答案 1 :(得分:0)

我不确定你为什么要使用正则表达式(可能你的问题或文本/数据集比你提供的更复杂/更长),但你想要解决的问题可以很容易地在一行中解决:

newmsgBody = [x.strip() for x in msgBody.split('\n') if x.startswith('Company')][0]
print(newmsgBody)

答案 2 :(得分:0)

如果所有数据的组织方式相同,您只需使用1行(在[18]中)。

In [16]: string
Out[16]: 'blahblahblah\nCompany : BALDWIN LINE CONST OF MD INC\nContact Name : STEVE SMITH Fax: (000)000-0000\nContact Phon
e: (000)000-0000\n'
In [17]: string.split('\n')
Out[17]: 
['blahblahblah',
 'Company : BALDWIN LINE CONST OF MD INC',
 'Contact Name : STEVE SMITH Fax: (000)000-0000',
 'Contact Phone: (000)000-0000',
 '']
In [18]: string.split('\n')[1]
Out[18]: 'Company : BALDWIN LINE CONST OF MD INC'