我的正则表达式知识让我失望,我需要一些帮助。
我正在尝试使用可能如下所示的字符串输入
@"RRR:domsd\ddf:sdf:dsf:f"
或
@"sds4:kwertss\wegggds:rowdf"
并且在两种情况下从开始到\
之后但在第一:
之后的第一个\
之前剥离所有内容。
结果将是:
RRR:domsd\ddf
sds4:kwertss\wegggds
如果找不到: \ :
序列,则状态匹配是否失败。
到目前为止,我已尝试过以下两个注册表
第一名:@".*[:].*[\\].*[:]"
,其中包含截至上一个:
的所有内容,而不是\
之后的第一个
第二名:@"(.+?:.+?):(.+)"
只匹配整个字符串
答案 0 :(得分:3)
您似乎需要使用negated character classes:
^[^:]*:[^\\]*\\[^:]*(?=:)
请参阅regex demo
<强>详情:
^
- 字符串开头[^:]*
- 除:
:
- 冒号[^\\]*
- 除\
\\
- 文字\
[^:]*
- 除:
(?=:)
- 需要:
的积极前瞻。在C#中:
var m = Regex.Match(s, @"^[^:]*:[^\\]*\\[^:]*(?=:)");
var res = string.Empty;
if (m.Success)
{
res = m.Value;
}
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用正则表达式:^(.*:.*[\\][^:]*):
。
如果找不到: \ :
序列,这将失败。
匹配将是括号之间的部分。
Here你可以看到一个演示。