【问题标题】:RegEx, characters between 2 strings without positive lookbehind正则表达式,2个字符串之间的字符,没有正面的后视
【发布时间】:2021-09-21 05:51:01
【问题描述】:

我有这样一句话Give me 4 of ABCD_X and then do something

我需要提取 ABCD_X - Give me 4 of 之后和空格之前的任何字符集。 数字可以是任意大小

我可以用这个表达式来做到这一点(取自this问题):

(?<=^Give me \d of )(.*?)(?=\s) 但是这个数字可以是 10 或更大,所以 (?<=^Give me \d+ of )(.*?)(?=\s) 在 python(pandas 列)中返回错误,即正向后看应该是固定宽度。

有没有一种方法可以避免正面回溯来提取这些字符?

【问题讨论】:

  • 尝试限制位数,例如\d{1,15}
  • 您可以只使用非捕获组(?:^Give me...),而不是向后查看。

标签: python regex pandas


【解决方案1】:

你可以试试:

^Give me \d+ of (\S+)

在线查看demo


  • ^ - 起始线锚点。
  • Give me \d+ of - 从字面上看,您的搜索字符串包含 1 位以上的数字。
  • (\S+) - 具有 1 个以上非空白字符的捕获组。

例如:

import pandas as pd
df = pd.Series(['Give me 4 of ABCD_X and then do something', 'Give me 10 of ABCD_Y and then do something'])
df = df.str.extract(r'^Give me \d+ of (\S+)')
print(df)

打印:

   0
0  ABCD_X
1  ABCD_Y

注意:如果您要使用命名捕获组,列标题将使用该组的名称而不是组的整数。

【讨论】:

  • 这很好用,非常感谢!特别是对pandas的详细解释和测试!
猜你喜欢
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 2014-10-01
相关资源
最近更新 更多