【问题标题】:select specific word from first 2 lines, starting with specific word, regex从前 2 行中选择特定单词,从特定单词开始,正则表达式
【发布时间】:2020-01-25 20:09:15
【问题描述】:

数据是熊猫系列: 我正在使用df.B=df.A.str.extract(r'') 用提取的 WHERE 词创建 B 列 df:

A
HI my lines are
so super WHERE1 my car
car go anywhere
next line like this
HI my lines are
so super WHERE2 my car
one WHERE HI like me

以上数据为测试数据,HI字之间有时有40行空格。 我需要从 HI 开始的前两行获取,这始终是第一行。 从第一行开始,得到 WHERE1 和 WHERE2 字

到目前为止我的正则表达式:

^(HI(.*\n){2}) #to select first two lines

我不知道应该在哪里添加我要查找的单词 (WHERE1|WHERE2)

预期输出:

WHERE1
WHERE2

【问题讨论】:

  • 预期输出是什么?
  • 两个词,WHERE1 和 WHERE2
  • 那么你想在每个 HI 之后获取 WHERE1 和 WHERE2 吗?
  • 是的,如果 HI 是起始行,则在每个 HI 之后
  • 为什么不简单地搜索每个 WHERE1 和 WHERE2?您需要职位还是其他?

标签: python regex pandas


【解决方案1】:

您可以将此正则表达式与MULTILINE 模式一起使用:

^HI\s.*(?:\n.*)?\b(WHERE1|WHERE2)\b

RegEx Demo

正则表达式详细信息:

  • ^HI\s:匹配以HI 开头的行和一个空格
  • .*: 匹配 0 个或多个任意字符
  • (?:\n.*)?:可选组以匹配换行符和 0 个或多个 o 任何字符
  • \b(WHERE1|WHERE2)\b:匹配 WHERE1WHERE2 与单词边界

【讨论】:

  • 你好,你能告诉我如何从这个正则表达式中提取 group(1) 吗?我正在尝试使用上面的代码df.B=df.A.str.extract(r'^HI\s.*(?:\n.*)?\b(WHERE1|WHERE2)\b').group(1),但我收到一个错误 AttributeError: 'NoneType' object has no attribute 'group' ,我正在搜索 secong 行的这种方式,以防输入是 pd.Series 是好的怎么走?也许我应该考虑在这个正则表达式行而不是行中考虑?
  • 您的输入是否以Hi开头的行开头
  • 您能否打开我的 regex101 演示并将您的完整输入文本粘贴到那里,然后为我提供更新的演示链接。否则,您无法在 cmets 中复制/粘贴多行文本。
  • 它的文本相同,关键是我使用 pd.Series 打开它,并收到已经提到的错误
  • 我不知道pd.Series。也许你可以试试:r'(?m)^HI\s.*(?:\n.*)?\b(WHERE1|WHERE2)\b'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2021-04-20
  • 2021-04-20
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
相关资源
最近更新 更多