首页 > 解决方案 > 正则表达式字符串前后没有或一个或多个空格

问题描述

如何为以下字符串编写正则表达式,前后没有空格或多空格。

"any"
"any4"
"any6"
" any "
" any4 "
" any6 "
"  any  "
"  any4  "
"  any6  "

我试过"any[4,6]{0,1}$"了,但这仅适用于前三个字符串。

标签: regexpowershell

解决方案


要完全匹配此类字符串(省略^and$进行子字符串匹配):

$strings = (
  "any",
  "any4",
  "any6",
  " any ",
  " any4 ",
  " any6 ",
  "  any  ",
  "  any4  ",
  "  any6  "
)

$strings -match '^ *any[46]? *$' # matches all of the above

要匹配其他形式的空白,\s请使用 .

提取带有空格修剪的标记:

$strings -replace '^ *(any[46]?) *$', '$1' # -> 'any', 'any4', ..., 'any4', 'any6'

(...)形成一个捕获组,它$1在替换字符串中引用。有关更多信息,请参阅我的这个答案


至于你尝试了什么:

  • [4,6]是一个字符,这意味着单个输入字符与这些字符中的任何一个匹配,包括,,这不是您的意图。

  • 您对重复符号(量词)的使用{0,1}是正确的(前面表达式的 0 或 1 个实例),但?它是同一构造的更简单形式(就像*比 更简单{0,})。

  • 通过将$(输入结束断言)直接放在 之后{0,1},您不允许可选的尾随空格。


推荐阅读