regex - 在最后一个反斜杠之后提取第一个非点文本字符串
问题描述
有人可以帮我从下面提供的字符串中提取粗体文本“england”吗
\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.CLSM.IST
我试过了\\.*?\.
,但后来我得到了
\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.
任何帮助将不胜感激
解决方案
在 Powershell 中,您可以获取不带扩展名的文件名,将字符串拆分.
并获取第一个项目:
PS> $s = '\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.CLSM.IST'
PS> [System.IO.Path]::GetFileNameWithoutExtension($s).Split('.')[0]
england
如果您出于某种原因需要正则表达式,我建议使用
.*\\([^.]+)
并获取第 1 组值。请参阅正则表达式演示。
细节
.*\\
- 匹配所有文本直到并包括最后一个\
字符(因为.*
是一个贪婪的子模式)([^.]+)
- 第 1 组:一个或多个字符.
另一种正则表达式可能看起来像
([^.\\]+)[^\\]*$
查看另一个正则表达式演示。
细节
([^.\\]+)
.
- 第 1 组:除and之外的一个或多个字符\
[^\\]*$
- 0 个或更多字符\
,直到字符串 ($
) 的末尾。
Powershell 用法:
PS> $s -match '([^.\\]+)[^\\]*$' | Out-Null
PS> $matches[1]
england
如果您需要一个直接返回所需字符串的正则表达式,您可以使用
$s -replace '.*\\([^\\.]+)[^\\]*$', '$1'
.*
- 尽可能多地匹配任何 0+ 个字符\\
- 一个\
字符([^\\.]+)
- 第 1 组(用 引用):匹配并使用除and$1
之外的一个或多个字符\
.
[^\\]*$
- 除\
([^\\]*
) 和字符串结尾 ($
) 之外的 0+ 个字符。
推荐阅读
- windows - 如何在powershell中获取进程的内存(私有工作集)?
- python-3.x - 如何从数据框中的距离和持续时间中提取“价值”?
- react-native - 如何删除网络请求失败的错误屏幕并在 react-native 中显示消息“没有互联网连接”
- jmeter - 使用非 GUI 模式的 Jmeter 多个请求
- css - 如何使用 CSS flex 从父 DIV 到子 DIV 获得 100% 的高度
- api - 使用端点中具有 & 的 PowerShell 调用 api 在 sql 作业中引发错误
- java - WS 安全策略正在生成的 WSDL 中
- asp.net - 从 .NET Framework 应用程序启动 AspNetCore 托管
- android - 依赖问题:DexArchiveMergerException
- javascript - 获取有关数组推送的先前数据