正则表达式字符串前后无空格或一个或多个空格

时间:2018-07-04 15:21:20

标签: regex powershell

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

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

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

4 个答案:

答案 0 :(得分:2)

完全匹配这样的字符串(省略^$进行子字符串匹配)

$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在替换字符串中引用该捕获组。有关更多信息,请参见我的this answer


关于您尝试过的事情:

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

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

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

答案 1 :(得分:0)

您可以尝试此正则表达式

\"([a-zA-Z0-9]+)\"

答案 2 :(得分:0)

该工作不需要RegEx。您只需要

$string -like '*any*'

此外,它更快。

答案 3 :(得分:0)

仅显示前3个是因为您在末尾使用了$$推断该行的END是您输入的最后一个字符

如此

any[4-6]{0,1}$

将匹配

  

any4
  任何
  any6
  any4
  any6
  任何

如果要在两端找到空白,只需移除$

如果您尝试根据特定的字符串查找它,则可能会出现空格 使用

^\s*any[4-6]{0,1}\s*$

请注意,正则表达式在某些系统上会有所不同,并且此代码可能无法在您的平台上运行,因为\s可能未知,等等。

还请注意,实际的空格(例如^ [4-6]{0,1} $)可能无法正确搜索,如果搜索成功,它将仅搜索空格而不是空格,制表符等。

但是,如果要确定包含空格,则可以将其转义,即^\ [4-6]{0,1}\ $。 在某些系统(例如Linux)中,命令中的空格会使其认为它是下一个变量/输入,并且不会理解[4-6]{0,1}的含义