遇到正则表达式问题

时间:2014-03-12 09:10:42

标签: regex powershell

我有一个字符串$var1 = [string]"Weiß Steht Für Schwarz"

正如您所看到的,我正在尝试使用下划线_替换这个奇怪的ascii代码。我想做的事情是:$var1=$var1 -replace('[(ß)\(ü)\ ]','_')但结果如下:Wei_______Steht________r_S_hwarz通常我会说这对我的目的是好的,但它也取代了我的正常“F”和“c”。如果在即将到来的字符串中有更多的ascii代码,我也想扩展我的正则表达式。是否有可能只替换一系列字母而不替换单个字母?

3 个答案:

答案 0 :(得分:1)

让我们概括一下:

$var1=$var1 -replace('&#x[\dA-F]{2};','_')

输出:

Wei_ Steht F_r Schwarz

如果您想要替换空格,那么:

$var1=$var1 -replace('&#x[\dA-F]{2};|\s','_')

输出:

Wei__Steht_F_r_Schwarz

您可能想要以下解决方案:

$var1 = "Weiß Steht Für Schwarz"   
[System.Reflection.Assembly]::LoadWithPartialName("System.Web")
$var1 = [System.Web.HttpUtility]::HtmlDecode($var1)
$var1 = $var1.Replace('ä', 'ae').Replace('ö', 'oe').Replace('ü','ue').Replace('Ä', 'Ae').Replace('Ö', 'Oe').Replace('Ü','Ue').Replace('ß', 'ss')
$var1 = $var1 -replace('\s', '_')

输出:

Weiss_Steht_Fuer_Schwarz

答案 1 :(得分:0)

你想要做的是:

<?PHP
$var1 = "Wei&#xDF; Steht F&#xFC;r Schwarz";
echo preg_replace("/(&#xDF;|&#xFC;)/", "_", $var1);

演示:https://eval.in/118621

输出:Wei_ Steht F_r Schwarz

更好的例子,使其更通用:

<?PHP
$var1 = "Wei&#xDF; Steht F&#xFC;r Schwar&#xFC;z";
echo preg_replace("/(&#\w{3};)/", "_", $var1);

输出:Wei_ Steht F_r Schwar_z

演示:https://eval.in/118631

答案 2 :(得分:0)

字符串: var1 = [string]"Wei&#xDF; Steht F&#xFC;r Schwarz"

正则表达式: /&#\w+;/g

DEMO

将匹配任何ASCII代码的字符串中的多次出现,例如上面的&#xDF;

编辑:

看起来你使用的是Powershell,但是我希望我的RegEx可以工作,虽然我不知道它的语法,但我可以通过你的代码猜测下面的代码应该符合你的要求:

$var1=$var1 -replace(/&#\w+;/g,'_')