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