Python 将文本匹配到多个组的正则表达式

Python 将文本匹配到多个组的正则表达式,python,regex,Python,Regex,我正在尝试设置一个正则表达式来匹配文本,我希望一个特定的字符串与文本其余部分(如果存在)中的一个单独的组相匹配 例如,如果我的字符串是这是一个测试,我希望这是一个匹配第一组,而测试匹配第二组。我正在使用python正则表达式库。下面是我想要的结果的几个例子 这是一项测试-第1组:这是一项,第2组:测试 一次一天-第1组:一次一天,第2组: 一天测试是-第1组:一天,第2组:测试 测试,1,2,3-不匹配 这不是演习-第1组:这不是演习,第2组: 在这些情况下,我在第二组中匹配的特定字符串是t

我正在尝试设置一个正则表达式来匹配文本,我希望一个特定的字符串与文本其余部分(如果存在)中的一个单独的组相匹配

例如,如果我的字符串是
这是一个测试
,我希望
这是一个
匹配第一组,而
测试
匹配第二组。我正在使用python正则表达式库。下面是我想要的结果的几个例子

  • 这是一项测试
    -第1组:
    这是一项
    ,第2组:
    测试

  • 一次一天
    -第1组:
    一次一天
    ,第2组:

  • 一天测试是
    -第1组:
    一天
    ,第2组:
    测试

  • 测试,1,2,3
    -不匹配

  • 这不是演习
    -第1组:
    这不是演习
    ,第2组:


在这些情况下,我在第二组中匹配的特定字符串是test。我不确定如何设置正则表达式以正确匹配这些特定情况。

您可以尝试以下正则表达式:

^(this.*?)(test)?$
NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    this                     'this'
--------------------------------------------------------------------------------
    .*?                      any character except \n (0 or more times
                             (matching the least amount possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  (                        group and capture to \2 (optional
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    test                     'test'
--------------------------------------------------------------------------------
  )?                       end of \2 (NOTE: because you are using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \2)
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
正则表达式的解释:

^(this.*?)(test)?$
NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    this                     'this'
--------------------------------------------------------------------------------
    .*?                      any character except \n (0 or more times
                             (matching the least amount possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  (                        group and capture to \2 (optional
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    test                     'test'
--------------------------------------------------------------------------------
  )?                       end of \2 (NOTE: because you are using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \2)
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

你可以试试这个伴侣

^(?:(?!test))(?:(.*)(?=\btest\b)(\btest\b)|(.*))
解释

  • ^(?(?!test))
    -否定的前瞻性。不匹配从test开始的任何内容
  • (.*)
    -匹配除换行符以外的任何内容
  • (?=\b测试\b)
    -正向前瞻。在单词边界之间匹配
    test
  • (\btest\b)
    -捕获组匹配
    测试
  • |
    -交替的工作原理与逻辑OR相同
  • (.*)
    -匹配除换行符以外的任何内容

我已经更新了我的问题,使之更加具体,我不能假设行将以这个或那个测试结束字符串
testis match
testing not match
添加更多关于这是一个拼写错误的解释,我更新以更正它。但是,第1组必须包含一些文本。这非常有效。有没有办法让它发现测试1、2、3不匹配?如果没有,我想我可以解决这个问题。(或者更好的是像测试一二三这样的东西)好吧,总是测试准确的单词吗?不,好的。假设测试字符串的
测试一二三
。您不想匹配字符串开头的
测试
,对吗?正确,理想情况下,该字符串将不匹配。