【问题标题】:Regex - Match space between monoquote正则表达式 - 单引号之间的匹配空间
【发布时间】:2021-02-25 10:18:38
【问题描述】:

需要“标记”包含空格且位于单引号内的那些。 如果我们有

 'sdf-d3f', 'dfdf ', 'dfd fd' , ' dfdfd' , ' dfdfdf', 'df', 'sf9f'

并申请

'[^\s]*'

获得 firstprelastlast - 很公平。

如果我删除 ^,将一无所获。有人可以详细说明为什么不起作用并提供正确的正则表达式吗?

【问题讨论】:

  • Regex.Matches(text, @"'[^']*'").Cast<Match>().Select(x => x.Value).Where(y => y.Any(z => Char.IsWhiteSpace(z)))?见a C# demo

标签: c# regex


【解决方案1】:

您的表达式将捕获除单引号内的空格之外的任何内容。 [^\s] 表示任何字符是空格字符。像[^\s]* 一样使用它会捕获所有不是空格的字符。在 '[^\s]*' 这样的引号内使用它会捕获除引号内的空格之外的所有内容。这意味着如果逗号之间没有空格,它也会捕获那些。 Here 是我玩你的数据时你的表达方式,删除了中间的一些空格。

我认为你应该这样做:

This 在用空格捕获单词时会包含引号:'\s*\w*\s+\w*\s*'

\w 表示任何单词字符。使用 * 将捕获 0 个或更多字符,而使用 + 将捕获 1 个或更多字符。这个表达式意味着字符之间至少应该有一个空格,并且字符的左边或右边可以有0个或多个空格,而所有这些都应该在单引号内。这也会捕获这些引号。

如果您不想要引号,this包含它们:(?<=')\s*\w*\s+\w*\s*(?=')

(?<=') 在实际表达式之前查找引号,并且不将其包含在匹配中。与(?=') 相同,但它关注的是实际表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多