根据正则表达式中的相同值选择组

时间:2018-06-25 10:38:01

标签: python regex

我有以下内容

ONE
1234234534564   123
34erewrwer323   123
123fsgrt43232   123
TWO
42433412133fr   234
fafafd3234132   342
THREE
sfafdfe345233   3234
FOUR
324ereffdf343   4323
fvdafasf34nhj   4323
fsfnhjdgh342g   4323

考虑ONE,TWO,THREE and FOUR是单独的组。基于每个组中每行第二个值的条件,我只想匹配ONEFOUR,并且将匹配其中有多行的组。如何在正则表达式中做到这一点

我已经尝试过使用正则表达式,但是不符合要求

\w+\n\w+\t(\d+)(\n\w+\t\1){2,}

1 个答案:

答案 0 :(得分:1)

您可以使用

public partial class View : System.Web.UI.UserControl, IView
{
    public Presenter.Factory PresenterFactory { get; set; }

    public string Text
    {
        set
        {
            lbText.Text = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        var presenter = PresenterFactory(this);            
    }
}

public class Presenter
{
    public delegate Presenter Factory(IView view);

    public Presenter(IView view)
    {
        view.Text = "Hello World";
    }

}

请参见regex demo

详细信息

  • r'(?m)^[A-Z]+\r?\n\S+\s+(\d+)(?:\r?\n\S+\s+\1)+$' -启用(?m)模式以使re.MULTILINE / ^分别与行的开始和结束匹配
  • $-一行的开头
  • ^-1个以上的大写ASCII字母(视情况调整)
  • [A-Z]+-换行符,例如CRLF或LF
  • \r?\n-1个以上非空格字符
  • \S+-1个空格(如果选项卡是字段分隔符,则使用\s+
  • \t-捕获组1,一位或多位数字
  • (\d+)-一个或多个换行符,后跟1+个非空格,1 +个空格,并且与组1中的值相同,因为(?:\r?\n\S+\s+\1)+是对存储在其中的值的反向引用该组
  • \1-行尾。

在Python中,使用$

re.finditer

请参见Python demo