使用正则表达式捕获短语

时间:2016-01-04 19:26:27

标签: python regex

我的问题是关于以下推文:

Credit Suisse Trims Randgold Resources Limited (RRS) Target Price to GBX

JPMorgan Chase & Co Trims Occidental Petroleum Co (OXY) Target Price to

我想从第一条推文中删除“Randgold Resources Limited(RRS)”,并使用Regex从第二条推文中删除“Occidental Petroleum Co(OXY)”。< / p>

我正在使用Python,到目前为止,我已经尝试过这个没有太多运气了:

Trims\s[\w\s.()]+(?=Target)

我想在两个实例中捕获短语“Trims Target Price”。帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

(?<=Trims )([A-Z][a-z]+ ){3}\([A-Z]{3}\)

See it in action

<小时/> 这个想法是:

  • (?<=Trims ) - 使用positive lookbehind
  • 找到Trims前面的地点
  • [A-Z][a-z]+ - 以大写字母开头并以多个小写字母开头的单词
  • ([A-Z][a-z]+ ){3} - 三个单词后跟空格
  • \(\) - 括号必须转义,否则它们具有捕获群组的含义
  • [A-Z]{3} - 三个大写字母

答案 1 :(得分:1)

您可以使用此基于外观的正则表达式:

p = re.compile(r'(?<= Trims) .*?(?= Target )')      
result = re.sub(p, "", test_str)

(?<= Trims) .*?(?= Target )将匹配TrimTarget之间的任何文字。

RegEx Demo

答案 2 :(得分:0)

(?<=...) Lookbehind assertion, match if preceded字缺少Trims

re.sub('(?<=Trims)\s[\w\s.()]+(?=Target)', ' ', text)