Regex 包含可转义字符的正则表达式组

Regex 包含可转义字符的正则表达式组,regex,powershell,escaping,Regex,Powershell,Escaping,我需要一个正则表达式,它可以在一个sting开始时捕获所有的空格,这样我就可以计算它们了。我使用它将XML转换为带有CSS引用的格式化和颜色编码的HTML 我现在有这个 $regEx = '^( *)' if ($spaces = [RegEx]::Matches($string, $regEx).value) { Write-Host "|$($spaces)|$($spaces.Length)|" } 它适用于简单字符串,例如 $string = ' Some

我需要一个正则表达式,它可以在一个sting开始时捕获所有的空格,这样我就可以计算它们了。我使用它将XML转换为带有CSS引用的格式化和颜色编码的HTML

我现在有这个

$regEx = '^( *)'
if ($spaces = [RegEx]::Matches($string, $regEx).value) {
    Write-Host "|$($spaces)|$($spaces.Length)|"
}
它适用于简单字符串,例如

$string = '  Some text'
$string = '  <source assetRepository="AWS">\\Server\Assets\Revit\2021'
但对于更现实的字符串,如

$string = '  Some text'
$string = '  <source assetRepository="AWS">\\Server\Assets\Revit\2021'
问题当然是存在需要转义的字符。但是我不能用
[regex]::转义$regex,因为我需要第一个特殊字符。有没有办法创建一个包含所有转义字符的字符集,我可以将其放在空格组之后?还是全部、全部或仅离散转义字符?

由于第二个字符串中的第一个字符是制表符,\x09,您可以使用

$regEx = '^[ \t]*'
此正则表达式匹配任何零个或多个*空格或制表符

如果计划匹配字符串开头的任何空格,请使用

$regEx = '^\s*'
或者,如果不想匹配换行符,请使用

$regEx = '^[\p{Zs}\t]*'

因为[\p{Zs}\t]匹配任何水平空格。

我基本上对PowerShell一无所知,但为什么需要转义呢?我熟悉的所有语言和正则表达式实现都应该将该正则表达式视为一个正则表达式。那里的字符序列是正确的。字符串也应该没有问题,因为字符串值本身不会有任何转义-通常情况下,文本中的a\n被转换为字符串值中的换行符,因此如果字符串被接受为有效字符串,则无需再转义任何内容-正则表达式正在处理它的内容。@vlaz,老实说,我不确定。我只知道当字符串中有可转义字符时,整个正则表达式都会失败,如果没有,则会成功。所以我认为这是一个特殊的正则表达式。但我试过了,它对两个字符串都有效。所以现在我认为这一定是一个特定于PowerShell的问题。Arg。如果这真的是问题所在,那么一定是PS。它肯定不能像我习惯使用其他工具那样工作,但我不确定为什么会这样。很难猜出问题出在哪里。也许具有PS知识的人可以提供帮助并指出正确的方向。要获得前导空格的数量,请将原始字符串的长度与使用.TrimStart“”修剪的相同字符串进行比较。@lee dailey我感觉自己在XKCD面板中。我会换个角度,但我会保留这个问题,因为我仍然想知道为什么在regex101.com上测试良好的正则表达式在PowerShell中失败。