【问题标题】:Regex expression: number of characters containing a pattern正则表达式:包含模式的字符数
【发布时间】:2021-01-07 16:57:21
【问题描述】:

我有一个具有以下结构的数据框:

Desc_ORF ORF
beta-glucosidase tb512
succinate-semialdehyde dehydrogenase tb111
probable epoxide hydrolase tb045

我正在使用这个函数来过滤数据框:

df.set_index('Desc_ORF').filter(regex=pattern, axis=0)

它与我正在尝试的其他模式完美配合,但我无法获得将 Desc_ORF 包含 hydro 的行过滤成 13 个字符的单词的正则表达式模式。

例如:我的代码应该保留行 succinate-semialdehyde dehydrogenase,因为它包含 dehydrogenase,它有 13 个字符并包含模式 hydro .另一方面,过滤器必须丢弃可能的环氧化物水解酶,因为虽然它包含hydro,但单词hydrolase 不是13 个字符。

Desc_ORF ORF
succinate-semialdehyde dehydrogenase tb111

我尝试了不同的模式,最后一次尝试是:^(?={13}$)(\b\Shydro\S\b)。使用此模式,我仅按包含 hydro 的单词进行过滤,但无法获得包含 hydro 且长度为 13 个字符的单词。

【问题讨论】:

  • “regex”中的“ex”已经是“表达式”的意思;该术语是正则表达式的缩写。

标签: python regex


【解决方案1】:

匹配第二行中的单词的一个选项可能是:

(?<!\S)(?=\S{13}(?!\S))\S*hydro\S*
  • (?&lt;!\S) 在左侧断言空白边界
  • (?=\S{13}(?!\S)) 断言 13 个非空白字符,后跟空白边界
  • \S*hydro\S* 在可选的非空白字符之间匹配hydro

Regex demo

pattern=r"(?<!\S)(?=\S{13}(?!\S))\S*hydro\S*"
df = df.set_index('Desc_ORF').filter(regex=pattern, axis=0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2021-07-13
    • 1970-01-01
    • 2018-06-21
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多