python - 使用正则表达式量词 python 时出现关键错误

标签 python regex pandas

我正在 try catch pandas df 中指定股票后面的单词。我有几只格式为 $IBM 的股票,并且正在设置一个 python 正则表达式模式来搜索每条推文中股票后面的 3-5 个单词(如果找到)。

我的 df 名为 stock_news 如下所示:

   Word       Count

0  $IBM     10
1  $GOOGL   8  
etc

pattern = ''
for word in stock_news.Word:
    pattern += '{} (\w+\s*\S*){3,5}|'.format(re.escape(word))

但是我的理解是 {} 应该是一个量词,在我的例子中匹配 3 到 5 次,但是我收到以下 KeyError:

KeyError: '3,5'

我也尝试过将原始字符串与 r'{} (\w+\s*\S*){3,5}|' 一起使用,但无济于事。我还尝试在 regex101 上使用此模式,它似乎在那里工作,但在我的 Pycharm IDE 中不起作用。任何帮助将不胜感激。

查找代码:

pat = re.compile(pattern, re.I)

for i in tweet_df.Tweets:
    for x in pat.findall(i):
        print(x)

最佳答案

当您构建模式时,末尾会留下一个空的替代项,因此您的模式可以有效匹配任何字符串,即不匹配文本之前的每个空格。

您需要构建如下模式

(?:\$IBM|\$GOOGLE)\s+(\w+(?:\s+\S+){3,5})

您可以使用

pattern = r'(?:{})\s+(\w+(?:\s+\S+){{3,5}})'.format(
              "|".join(map(re.escape, stock_news['Word'])))

请注意,f 字符串或格式字符串内的文字大括号必须是双的

正则表达式详细信息

  • (?:\$IBM|\$GOOGLE) -一个non-capturing group匹配 $IBM$GOOGLE
  • \s+ - 1 个以上空格
  • (\w+(?:\s+\S+){3,5}) - 捕获组1(使用 str.findall 时,仅返回这部分):
    • \w+ - 1+ 个单词字符
    • (?:\s+\S+){3,5} - 一个非捕获*组,匹配 3、4 或 5 个 1+ 空格,后跟 1+ 非空格字符

请注意,非捕获组旨在对某些模式进行分组,或量化它们,而不实际为它们匹配的值分配任何内存缓冲区,以便您可以仅捕获您需要返回/保留的内容。

关于python - 使用正则表达式量词 python 时出现关键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62133480/

相关文章:

python - 如何将缺失的行插入到该数据集中?

javascript - 从所有数字和百分比之间的字符串中删除空格(javascript 正则表达式)

php - 如何在 PHP 中使用正则表达式将文本拆分为 Unicode 单词

python-3.x - 当我尝试在 GCP 上导入 NumPy 库时,如何修复出现的 Python 错误 "...failed to map segment from shared object"?

python - 如何分别处理具有多个测量时间列和多个测量变量的数据帧

python - 在滑动窗口中寻找 k-mers

python - 如何在 Mac 上设置 Julia init 路径?

python - 如何删除特定类别的标签?

javascript - 可以从 URL 中提取所有子域 + 域并与 RFC 3490 兼容的正则表达式

python - 如何读取 Pandas 数据框中的 JSON 对象