【问题标题】:using regex to capture setences containing word for each word in a list python使用正则表达式捕获包含列表中每个单词的单词的集合python
【发布时间】:2020-09-20 23:35:48
【问题描述】:

我正在使用 python 和正则表达式来尝试抓取推文列表中的所有句子,其中包含一系列 pandas df 中每个单词的特定单词。

我的 df stocks_df 包含某些股票名称,例如

  Symbol
0   $GSX
1  $NVDA
2  $MBRX
5  $BBBY
6   $DIS

我想要推文中包含这些字符串的所有句子。我尝试的解决方案遵循我遇到的另一个正则表达式问题:Key error when using regex quantifier python

但是我的解决方案主要是在句子的开头抓取符号,如果在句子的中间则不抓取它。它似乎也只匹配符号而没有得到句子的其余部分。我的代码是这样的:

pattern2 = r'(?:{}) (?:[^.]*[^.]*\.)'.format("|".join(map(re.escape, stocks_df['Symbol'])))

有人明白为什么不匹配完整的句子吗?

【问题讨论】:

  • 不确定[^.]*[^.]* 的意图为什么要重复?给我们一些输入的例子。
  • 这里没有足够的细节。如果您打算匹配没有包含“单词”的缩写的“句子”,您可以尝试使用r'[^.?!]*(?:{})\b[^.?!]*[.?!]' 而不是r'(?:{}) (?:[^.]*[^.]*\.)'
  • @WiktorStribiżew 谢谢,我的解释可能有点糟糕,但你的模式正是我想要得到的。谢谢。

标签: python regex pandas


【解决方案1】:

如果您不必处理缩写和其他杂乱的格式,您可以使用匹配这些字符串

r'[^.?!]*(?:{})\b[^.?!]*[.?!]'.format("|".join(map(re.escape, stocks_df['Symbol'])))

模式看起来像 [^.?!]*(?:\$GSX|\$NVDA|...)\b[^.?!]*[.?!] 并且会匹配

  • [^.?!]* - 除了 !?. 之外的 0 个或多个字符
  • (?:\$GSX|\$NVDA) - 符号列中的一个词
  • \b - 需要整个单词,\b 是单词边界
  • [^.?!]* - 除了!?. 之外的 0 个或多个字符
  • [.?!] - ?!.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多