【问题标题】:Creating a regex to match the following scenario创建正则表达式以匹配以下场景
【发布时间】:2018-08-27 01:49:41
【问题描述】:

我是一名学生,正在从事一个小型研究项目,我需要抓取符合以下要求的网页:- 如果在文本中的任何位置找到单词 X 说“abc”,如果它出现在 X 出现两侧的 25 个字符窗口内,则查找模式 Y 说“pqr”。 例如。

pqrxyz 有效。

xyz 无效。

xyzpqr 有效。

pqr123456789123456789123456789xyz 无效。

我想不通。任何帮助将不胜感激。

((?=pqr).{20,}abc) | (pqr{20,}(?!abc))

这是我迄今为止的尝试。我不知道如何合并 20 个字符的窗口约束。

【问题讨论】:

  • 您是否尝试过自己编写这样的正则表达式?请发布您尝试过的代码
  • 您可以使用r'pqr.{0,25}xyz|xyz.{0,25}pqr'

标签: python regex grep


【解决方案1】:

. 是“任意单个字符”的正则表达式。

{n,m} 是“至少 n,不超过 m,前一个正则表达式的重复”的正则表达式。

因此,正则表达式xyz.{0,25}pqr 的意思是“xyz,后跟最多 25 个字符,然后是 pqr”。

因此,考虑到pqr 出现在xyz 之前或之后的可能性,我们得到这行python 代码:

if re.search('pqr.{0,25}xyz', line) or re.search('xyz.{0,25}pqr', line):

【讨论】:

    【解决方案2】:

    这样的事情应该可以处理这两种情况: pqr.{,25}?xyz|xyz.{,25}?pqr

    我使用Debuggex 进行测试,我认为这是展示正则表达式如何工作的简单方法。

    John 的回答详细说明了正则表达式中的特定元素。

    Regular expression visualization

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      • 2022-07-29
      • 2017-02-11
      相关资源
      最近更新 更多