在最后一个反斜杠之后提取第一个非点文本字符串

时间:2018-07-04 09:21:18

标签: regex powershell

有人可以帮助我从下面提供的字符串中提取粗体文本“ england”

\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.CLSM.IST

我尝试过\\.*?\.,但后来得到

\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

在Powershell中,您可能会得到不带扩展名的文件名,用.分割字符串并抢占第一个选项:

PS> $s = '\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.CLSM.IST'
PS> [System.IO.Path]::GetFileNameWithoutExtension($s).Split('.')[0]
england

如果出于任何原因需要正则表达式,我建议使用

.*\\([^.]+)

并获取组1的值。参见regex demo

详细信息

  • .*\\-匹配直到最后一个\字符的所有文本(因为.*是一个贪婪的子模式)
  • ([^.]+)-第1组:除.之外的一个或多个字符

另一个正则表达式可能看起来像

([^.\\]+)[^\\]*$

请参见another regex demo

详细信息

  • ([^.\\]+)-第1组:除.\之外的一个或多个字符
  • [^\\]*$-直到字符串(\)末尾的$以外的0个或多个字符。

Powershell的使用

PS> $s -match '([^.\\]+)[^\\]*$' | Out-Null
PS> $matches[1]
england

如果您需要可直接返回所需字符串的正则表达式,则可以使用

 $s -replace '.*\\([^\\.]+)[^\\]*$', '$1'

查看.NET regex demo

  • .*-匹配任意0个以上的字符
  • \\-一个\字符
  • ([^\\.]+)-第1组(用$1引用):匹配并消耗一个或多个除\.以外的字符
  • [^\\]*$-除\[^\\]*)和字符串结尾($)以外的0+个字符。

答案 1 :(得分:0)

在斜线后面使用斜线,在其他斜线前面使用负线:

(?<=\\)[^\\.]+(?!.*\\)

请参见live demo

请注意,没有群组;整个比赛都是您的目标!