如何为后面的字符串编写正则表达式,前或后没有空格或多空格。
"any"
"any4"
"any6"
" any "
" any4 "
" any6 "
" any "
" any4 "
" any6 "
我尝试过"any[4,6]{0,1}$"
,但这仅适用于前三个字符串。
答案 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}
的含义