正则表达式,匹配部分单词,C#

正则表达式,匹配部分单词,C#,c#,regex,C#,Regex,我尝试使用正则表达式来匹配文件中具有重复部分单词的实例,其中单词需要匹配,直到一个实例具有下划线_Id,而另一个实例是单词的部分匹配 大致如下: 我使用的正则表达式是:/^(\S+)(=(?S:)*\1.* 其中应返回2个匹配实例 在前向/后向查找中包括删除所有下划线,然后匹配重复项,这几乎更有意义吗 关于如何做到这一点,我有点困惑 尽管有人认为正则表达式可能不是最好的解决方案,但这个答案提供了问题所要求的正则表达式解决方案 正则表达式 想象 笔记 它看起来是重复的,因为它可以按任何顺序匹配

我尝试使用正则表达式来匹配文件中具有重复部分单词的实例,其中单词需要匹配,直到一个实例具有下划线_Id,而另一个实例是单词的部分匹配

大致如下:

我使用的正则表达式是:
/^(\S+)(=(?S:)*\1.*

其中应返回2个匹配实例

在前向/后向查找中包括删除所有下划线,然后匹配重复项,这几乎更有意义吗

关于如何做到这一点,我有点困惑 尽管有人认为正则表达式可能不是最好的解决方案,但这个答案提供了问题所要求的正则表达式解决方案

正则表达式

想象

笔记 它看起来是重复的,因为它可以按任何顺序匹配,或者是
*Id
然后
*\u Id
或者
*\u Id
然后
*Id

这也允许任何东西都在这条线之间

代码 第2部分:驱逐罪犯 如果这样做对你来说-你可以执行一个稍微修改版本的更换

正则表达式

替换 想象

代码
你能给我一个它应该做什么的例子吗?你的解释有点难以理解。什么是实例?如何定义部分匹配?正则表达式通常在逐行过程中工作,除非您没有指定换行符(看起来您没有),然后您需要显式地查找换行符,否则您将在“public”etcIt上获得匹配项,看起来您正试图解析C#。你有没有考虑过使用像Roslyn这样的C#解析器?是的,这基本上是我试图在visual studio的查找功能上扫描多个cs文件的东西,因为它允许regexp。我试图在同一个文件中查找重复字段,其中同一字段的两个版本存在于该文件中,但重复和不正确的字段不包含_Id。但这可能不是最好的方法。我们的目标是让它显示某个Id和另一个ProPID上的匹配项,因为这些是从未删除的重复字段,并被前面提到的_idfieldnaming prop替换。是的-您的问题很清楚-但看起来像。ie当regex似乎不是正确的工具时,你会问如何在regex中实现它。您可以使用(具有VS插件)查找具有错误命名约定的变量,或者Resharper(R#)具有类似的功能。
public Guid? Something_Id { get; set;}
public Guid? SomethingId {get; set;}

public Guid? AnotherProp_Id { get; set;}
public Guid? AnotherPropId { get; set; }
(?:
  ^[^\r\n]+?\b(\S+)_Id\b[^\r\n]+.*?
  ^[^\r\n]+?\b(?:\1)Id\b
|
  ^[^\r\n]+?\b(\S+)Id\b[^\r\n]+.*?
  ^[^\r\n]+?\b(?:\2)_Id\b
)
try {
    Regex regexObj = new Regex(
        @"(?:
          ^[^\r\n]+?\b(\S+)_Id\b[^\r\n]+.*?
          ^[^\r\n]+?\b(?:\1)Id\b
        |
          ^[^\r\n]+?\b(\S+)Id\b[^\r\n]+.*?
          ^[^\r\n]+?\b(?:\2)_Id\b
        )", 
        RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Multiline);
    Match matchResults = regexObj.Match(subjectString);
    while (matchResults.Success) {
        // matched text: matchResults.Value
        // match start: matchResults.Index
        // match length: matchResults.Length
        matchResults = matchResults.NextMatch();
    } 
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}
(?:
  (^[^\r\n]+?\b(\S+)_Id\b[^\r\n]+(.*?))
  (^[^\r\n]+?\b(?:\2)Id\b)[^\r\n]+\r?\n
|
  (\r?\n^[^\r\n]+?\b(\S+)Id\b[^\r\n]+)(.*?)
  (^[^\r\n]+?\b(?:\6)_Id\b)[^\r\n]+
)
$1$7$8
string resultString = null;
try {
    resultString = Regex.Replace(subjectString, 
        @"(?:
          (^[^\r\n]+?\b(\S+)_Id\b[^\r\n]+(.*?))
          (^[^\r\n]+?\b(?:\2)Id\b)[^\r\n]+\r?\n
        |
          (\r?\n^[^\r\n]+?\b(\S+)Id\b[^\r\n]+)(.*?)
          (^[^\r\n]+?\b(?:\6)_Id\b)[^\r\n]+
        )", 
        "$1$7$8", RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Multiline);
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}