【问题标题】:.NET Regex - Get string after match.NET Regex - 匹配后获取字符串
【发布时间】:2018-09-17 14:07:55
【问题描述】:

我正在处理一些通常遵循下一种格式的字符串:

word1 word2 word3 word4

我最初的目标是返回第二个空格之后的字符串部分,以便得到:

word3 word4

我搜索了一下如何做到这一点,由于下一个正则表达式,我只成功检索了前两个单词,包括第二个空格(“word1 word2”):

^([^\s]*\s[^\s]*)\s

现在为了匹配我最初的目标,我想找到方法来返回实际上与给定模式不匹配的字符串的其余部分。有什么想法吗?

重要的是要通知我还必须处理下一个案件:

"" -> ""
"word1" -> ""
"word1 word2" -> ""
"word1 word2 word3" -> "word3"
"word1 word2 word3 word4 wordX" -> "word3 word4 wordX"

基本上在第二个间距之后返回所有内容(如果有任何明显的!)。我也想避免使用 Replace 或任何其他方法。

我提前感谢大家的回复,并祝您有美好的一天! 最好的问候,

【问题讨论】:

    标签: .net regex


    【解决方案1】:

    您可能会依赖 .NET 正则表达式中的可变长度回溯:

    (?<=^(?:\S+\s+){2}).+
    

    查看.NET regex demo\s 替换为空格,因为这是一个多行字符串演示,您可以将空格替换为[\s-[\r\n]][\p{Zs}\t] 以仅匹配水平空白字符)。

    详情

    • (?&lt;=^(?:\S+\s+){2}) - 正向后视将匹配紧接在字符串开头出现 2 次 1+ 非空白字符后跟 1+ 空白字符的位置
    • .+ - 除换行符之外的 1+ 个字符(如果在模式开头添加了 (?s),则 . 匹配任何字符)。

    【讨论】:

    • 它就像一个魅力!谢谢你的一切维克托! :)
    • 完成!我以前不能这样做,因为我昨晚才获得了投票的特权。再次感谢您所做的一切!
    【解决方案2】:

    不需要正则表达式。你可以试试这个:

    var inputString = "word1 word2 word3 word4";
    string.Join(" ", inputString.Split(' ').ToList().Skip(2).ToList());
    

    【讨论】:

    • 我的原始信息可能不是很清楚,但 Wiktor 是正确的。我想在不使用一些 C# 代码的情况下达到我的目标。无论如何,谢谢你的回应 Kots!
    【解决方案3】:

    这个也匹配

    ^(?:(\w+ ?)?(\w+ ?)?)(.*$)
    

    DEMO

    【讨论】:

    • 嗨!我的正则表达式测试器(regexstorm)没有返回与您相同的匹配项。也许结果可能会因口味而异?
    • 你在regex101.com查看了吗?
    • 我确实检查了你的演示。 ;) 我只是注意到不同的结果取决于使用的网站,并且想知道它们可能来自哪里。无论如何,谢谢您的回复!
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 2014-11-18
    • 2020-11-13
    • 2021-09-10
    • 1970-01-01
    • 2016-11-21
    • 2014-08-05
    • 1970-01-01
    相关资源
    最近更新 更多