【问题标题】:Check for one or more space in a word using regex使用正则表达式检查单词中的一个或多个空格
【发布时间】:2021-09-28 18:39:25
【问题描述】:

我的场景:

我正在尝试在句子中的单个单词(PK_myid)中查找空格。例如:

"ID is PK_myid some more words"

请注意,“一些更多的词”是固定的,并且永远是一样的。

到目前为止,我能够写这部分:

(?Id\s+is\s+(\w+\s+\w+\s+)+some) 

这只是检查单词之间的一个空格,我可以有多个空格,如下所示

"PK_ my id"

【问题讨论】:

  • 投反对票的人应该注意"能够写这部分到目前为止(?Id\s+is\s+(\w+\s+\w+\s+)+some) "

标签: c# regex


【解决方案1】:

你可以使用

\bID\s+is\s+(\w+(?:\s+\w+)*?)\s+some\b

请参阅regex demo详情

  • \bID - 整个词 ID
  • \s+is\s+ - is 用一个或多个空格括起来的单词
  • (\w+(?:\s+\w+)*?) - 第 1 组:一个或多个单词字符,然后出现零个或多个(但尽可能少)一个或多个空格和单词字符
  • \s+ - 一个或多个空格
  • some\b - 一个完整的词some

在 C# 中,要获得第一次出现,您可以使用

var output = Regex.Match(text, @"\bID\s+is\s+(\w+(?:\s+\w+)*?)\s+some\b")?.Groups[1].Value;

获取所有匹配项:

var output = Regex.Matches(text, @"\bID\s+is\s+(\w+(?:\s+\w+)*?)\s+some\b")
    .Cast<Match>()
    .Select(x => x.Groups[1].Value);

C# demo online

var line = "ID is PK_myid some more words\nID is PK_ my id some more words";
var pattern = @"\bID\s+is\s+(\w+(?:\s+\w+)*?)\s+some\b";
var output = Regex.Matches(line, pattern)
        .Cast<Match>()
        .Select(x => x.Groups[1].Value);
foreach (var s in output)
    Console.WriteLine(s);

输出:

PK_myid
PK_ my id

【讨论】:

  • 如果没有空格,它仍然匹配(PK_myid)的问题。
  • @KeshavTaurah 如果必须有空格,将*?替换为+?\bID\s+is\s+(\w+(?:\s+\w+)+?)\s+some\b
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多