【问题标题】:Regex for one or more words separated by spaces一个或多个用空格分隔的单词的正则表达式
【发布时间】:2014-08-05 05:49:49
【问题描述】:

我正在寻找一个正则表达式,其中我有一个或多个单词(可能也应该包括字母数字),由空格(一个或多个空格)分隔

  1. “测试这个东西”
  2. “测试这个”
  3. “测试”

上面是一些例子

我写了一个正则表达式来查看#1 重复的内容

\s*[a-zA-Z]*\s*[a-zA-Z]*\s*[a-zA-Z]*\s*

所以我想为重复部分做类似{3} 的事情。

但它似乎不起作用..我不敢相信它是如此困难。

(\s*[a-zA-Z]*){3}

【问题讨论】:

  • 您使用什么语言或实用程序进行此操作?
  • 我认为您必须将* 更改为+。所以你得到(\s+[a-zA-Z]+){3}
  • 我会使用类似this (?:\s*[a-zA-Z]+){1,3}
  • {3} 表示 恰好 3 次重复,因此它仅适用于 #1。如果要1-3个字,应该是{1,3}
  • 如果您想要精确的三个词或 1 到三个词,那么为什么要在标题中放置“一个或多个用空格分隔的单词的正则表达式”?

标签: regex


【解决方案1】:

如果你不在乎你有多少单词,这会起作用:

[\w\s]+

\w 是任何字母数字。如果您只需要字母,请将其替换为 a-zA-Z

【讨论】:

  • 0001 :: Test This Stuff :: #### PASS =====> 这是我正在为其编写正则表达式的文本?我在这里写了一个似乎不起作用的正则表达式 - 我想写一个通用的而不是特定的 "if re.search('\d\d\d\d\s::\s[[a-zA -Z]\s]+::\s\#\#\#\#\s[A-Z]*', aline):"
  • 字数可以变化..这就是为什么我想要一个通用的。 “测试这个东西”或“测试”或“测试东西”......类似的东西。
  • 这个正则表达式应该适用于您的目的。但是,您的正则表达式引擎可能需要将其包装在 ^$ 中才能通过测试,如下所示:^[\w\s]+$
  • 但是 ^ 会匹配行的开头.. 不是吗?
  • 是的,^ 意味着它必须从头开始 - 如果您需要检查整个字符串是否只包含带空格的单词而没有其他内容,请使用它。检查这个fiddle.re link(点击Java测试)
【解决方案2】:

我认为你需要这样的东西,

^\s*[A-Za-z0-9]+(?:\s+[A-Za-z0-9]+)*\s*$

DEMO

^(?:\s+[A-Za-z0-9]+)+\s+$

DEMO

【讨论】:

  • 我最喜欢你的回答,因为它不匹配空字符串,例如' '(即一堆空格,不包括撇号,仅用于可视化)。现在它确实验证了以下内容:' this is a string with spaces before',但这种情况可以通过删除模式开头的\s 来无效(尽管我保留它,因为它很有用)。我正在尝试自己的解决方案,但被卡住了——你使用非捕获组 = ?。我添加了一些其他特殊字符供我自己使用。感谢您的帮助!
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2013-12-13
相关资源
最近更新 更多