我有以下字符串:
01/01/2014 blbalbalbalba blabla / blabla
我想用空格替换最后一个斜杠,并在日期中保留前两个斜杠。
我最接近的是这种事情:
PS E:\> [regex] $regex = '[a-z]'
PS E:\> $regex.Replace('abcde', 'X', 3)
XXXde
但我不知道如何从行尾开始。任何帮助将不胜感激。
编辑我的问题以澄清: 我只想用空格字符替换最后一个斜杠字符,因此:
01/01/2014 blbalbalbalba blabla / blabla 变 01/01/2014 blbalbalbalba blabla blabla
知道“blabla”的长度从一行到另一行不等,斜线字符可能在任何地方。
谢谢:)
答案 0 :(得分:10)
使用以下字符串匹配:
(.*)[/](.*)
以及以下内容替换:
$1 $2
(.*)
匹配任何内容,任意次数(包括零)。通过将其包装在括号中,我们可以在替换序列期间再次使用它,使用占位符$
后跟元素编号(作为示例,因为这是第一个元素,$1
将是占位符)。当我们在替换字符串中使用相关占位符时,它会将正则表达式的此部分匹配的所有字符放入结果字符串中。在这种情况下,匹配的文本将为01/01/2014 blbalbalbalba blabla
[/]
用于匹配正斜杠字符。
(.*)
再次用于匹配任何次数,类似于第一个实例。在这种情况下,它会匹配blabla
,使其在$2
占位符中可用。
基本上,前三个元素一起工作以查找多个字符,后跟正斜杠,后跟另一个字符。因为第一个“匹配一切”是贪婪的(也就是说,它将尝试匹配尽可能多的字符),它将包括所有其他正斜杠,直到最后一个。它停止在最后一个正斜杠上的原因是包括它会使正则表达式失败,因为[/]
将无法再匹配任何东西。
答案 1 :(得分:2)
你也可以使用lookahead:
'01/01/2014 blbalbalbalba blabla/blabla' -replace '/(?=[^/]+$)',' '
01/01/2014 blbalbalbalba blabla blabla
'/(?= [^ /] + $)'将匹配紧接在EOL之前的一系列'not /'字符之前的'/'字符,但这可能不如直接匹配效率低。
答案 2 :(得分:0)
'01/01/2014 blbalbalbalba blabla/blabla' -replace '^(\d{2}/\d{2})/(\d{4} .*)','$1 $2'
# outputs this:
# 01/01 2014 blbalbalbalba blabla/blabla
答案 3 :(得分:0)
以下是没有正则表达式的方法:
$string = "01/01/2014 blbalbalbalba blabla/blabla"
$last_index = $string.LastIndexOf('/')
$chars = $string.ToCharArray()
$chars[$last_index] = ' '
$new_string = $chars -join ''
另一种方式:
$string = "01/01/2014 blbalbalbalba blabla/blabla"
$last_index = $string.LastIndexOf('/')
$new_string = $string.Remove($last_index, 1).Insert($last_index, ' ')
答案 4 :(得分:-1)
$是行尾的锚点。 所以 (。*?)([A-Z])$
应该匹配你想要的东西,而()中的东西就是你要替换的东西。
祝你好运