【问题标题】:Regex for escaping some single quotes用于转义一些单引号的正则表达式
【发布时间】:2021-12-23 22:36:33
【问题描述】:

我正在创建一些正则表达式来匹配字符串,例如: '讲义' '989' 基本上是两个单引号之间的任何东西。 所以我创建了一个类似于['][^']*['] 的正则表达式。

但这不适用于以下情况: “汉堡王”。预期的输出是burger king's 但根据我的逻辑 仅限burger king。 再举一个例子'pulkit'sharma',预期的输出应该是pulkit'sharma

那么任何人都可以帮助我吗?在这种情况下如何转义单引号。

【问题讨论】:

  • @WiktorStribiżew not the 's' 问题在于 s 之前的单引号。
  • 所以,你需要引号之间的字符串部分,我添加了代码来获取这些值,以防输入中有多个值。

标签: c# regex c#-4.0


【解决方案1】:

尝试积极的前瞻来匹配空格或行尾以匹配结束单引号

'.+?'(?=\s|$)

Demo

【讨论】:

    【解决方案2】:

    您可以匹配前面没有单词 char 并且后面跟着单词 char 的单引号,并匹配前面有单词 char 而后面没有单词 char 的 ' 之前的任何文本:

    (?s)\B'\b(.*?)\b'\B
    

    请参阅.NET regex demo

    注意,单引号不必用方括号括起来,它们不是特殊的正则表达式元字符。

    C#代码:

    var matches = Regex.Matches(text, @"(?s)\B'\b(.*?)\b'\B")
        .Cast<Match>()
        .Select(x => x.Groups[1].Value)
        .ToList();
    

    【讨论】:

    • 没有 s' 不是问题。例如,如果输入是 'pulkit'sharma'。输出应该是 pulkit'sharma。意味着我想要两个单引号之间的所有内容。
    • @PulkitSharma 我知道您还没有提出模式要求,所以我现在在猜测。在顶部查看我更新的解决方案和解释这意味着什么。如果不是您需要的,请详细说明什么您需要。
    • 不仅是单词 char,我还想要两个单 ' 之间的所有内容。例如'wings (5)' 输出应该是wings (5)。
    • @PulkitSharma 你只想要'(.*)' 吗?见demo。在匹配两个相同字符之间的字符串时,您需要非常具体地满足正则表达式的要求,尤其是当您还需要在这些字符之间匹配这些字符时。您是否意识到您正在尝试做的事情的复杂性?您确定可以使用常规语言完成吗?请帮助解释您正在做的事情的背景。
    猜你喜欢
    • 2011-05-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多