【发布时间】:2025-11-21 21:25:01
【问题描述】:
我想知道这是否可以在 C# 中使用正则表达式:
我想匹配多行文本中的单词“FOO”和“BAR”,但前提是这两个单词在连续行的同一列中开始。
换句话说,这应该匹配,因为两个单词都从同一列开始:
dha skj dh FOO dd fsdf sdf \n
xdsjk fh f BAR 98kf hkjdsf \n
这也应该匹配,即使在错误的地方还有一个“BAR”:
dha sk jdh FOO dd fsd fs df \n
xd BAR fhf BAR 98 kfhk jdsf \n
这应该不匹配,因为单词从不同的列开始:
dhas kjdh FOO dd fsdfsd ddef \n
xdB2e ARfhf BAR 98kfh kj dsf \n
编辑
我设法使用这样的反向引用在两个单词的前缀相同的情况下获得匹配:
var pattern = @"(?m)^(.*?)(FOO).*$\n^\1(BAR)" ;
var result = Regex.Match( "xxxFOOyyyy\nxxxBARzzz", pattern ) ;
但我真正想要的是反向引用第一个捕获组的 length。
【问题讨论】:
-
谢谢。我添加了一个示例模式,它在一小部分情况下给出了正确的结果
-
好的,好的,我明白了,但是现在还有一个问题:这里的最终结果是什么?对于任何给定的输入,您只需要 True/False 结果吗?它必须是单个正则表达式还是基于代码的解决方案也是“可接受的”?
-
我需要从 Regex.Match() 返回的匹配项(因为“FOO”和“BAR”在这里只是占位符),我更喜欢单个正则表达式。