【问题标题】:How do I skip a character getting between the string?如何跳过字符串之间的字符?
【发布时间】:2019-08-15 09:07:41
【问题描述】:

我对正则表达式很陌生,我需要从 ' ' 之间包含的字符串中获取特定值

使用正则表达式能够获取值,但在' ' 之间存在第三个' 时会出现异常。

变量规则包含整个字符串

IEnumerable<string> possibleValues = Regex
    .Matches(rule, @"'(?<val>.*?)'")
    .Cast<System.Text.RegularExpressions.Match>()
    .Select(match => match.Groups["val"].Value)
    .ToArray();   

当下面的字符串被传递时

规则:“街道地址”
一定是 'Samir Complex, 4th Floor, St Andrew's Road, Bandra (West)'(默认值)

预期值为街道地址Samir Complex, 4th Floor, St Andrew's Road, Bandra (West)

但获得街道地址Samir Complex, 4th Floor, St Andrew

【问题讨论】:

  • 您在Andrew's 中有一个撇号',并且您尽可能很少 匹配 - .*?,这就是为什么正则表达式在找到的第一个撇号处停止跨度>
  • 试试@"'(?&lt;val&gt;.*?)'\B"模式
  • 是的,谢谢这个作品你能把它放在答案中,这样我就可以接受这个

标签: c# regex linq


【解决方案1】:

当匹配撇号时,您不想匹配每一个:在您的情况下,Andrew's 中的' 应该跳过。 您可以尝试检查单词边界;详情见Difference between \b and \B in regex

@"'(?<val>.*?)'\B"

代码:

string[] possibleValues = Regex
  .Matches(rule, @"'(?<val>.*?)'\B")
  .Cast<Match>()
  .Select(match => match.Groups["val"].Value)
  .ToArray();  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多