Python正则表达式在HTML引号

时间:2015-05-24 15:26:10

标签: python regex quotes

我试图从EDGAR的公司10-K文件中提取股票代码。股票代码通常出现在一对HTML引号之间,例如“‘”或“’”。相关文本的典型部分示例:

  

我们的普通股已在纽约证券交易所上市(“纽约证券交易所”),代码为“ RXN”

此时我只想弄清楚如何处理各种引号中的一个或多个的出现。我可以编写一个匹配一种特定类型引号的正则表达式:

re.findall(r'under[^<]*the[^<]*symbol[^<]*&ldquo;*[^<]*\n',fileText)

但是,我不能写一个寻找多种引号的正则表达式。这个正则表达式什么都不产生:

re.findall(r'under[^<]*the[^<]*symbol[^<]*&ldquo;*&#145;*&#146;*&#147;*[^<]*\n',fileText)

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用

re.sub("&#([0-9]+);", lambda x:chr(int(x.group(1))), text)

这是有效的,因为您可以使用搜索/替换为替换部分提供可调用。 “#”后面的数字是字符的unicode点,Python chr函数可以将其转换为文本。

例如:

re.sub("&#([0-9]+);", lambda x:chr(int(x.group(1))),
       "this is a &#8220;test&#8220;")

结果

'this is a “test“'

答案 1 :(得分:0)

您的正则表达式会查找一起出现的所有引号。如果您正在寻找任何一个的可能性,您需要在每个字符串周围加上括号并or

(?:&ldquo;)*|(?:&#145;)*|(?:&#146;)*|(?:&#147;)*

?:使得paren组无法捕获。即,解析器不会将每个文件保存为重要文本。另外,您可能希望使用组捕获来保存股票代码 - 您实际需要的是什么。 非常快速而肮脏(且丑陋)的表达式将从给定字符串返回['NYSE', 'RXN']

re.findall(r'(?:(?:&ldquo;)|(?:&#14[567];)|(?:&#822[01];))(.+?)(?:(?:&ldquo;)|(?:&#14[567];)|(?:&#822[01];))', fileText)

您可能只希望在第一组中包含左引号,在最后一组中包含右引号。加上两者中的任何一个或两个。

相关问题