用1步Regex替换2步Regex以在下划线之间得到一个大写字母

问题描述 投票:0回答:2

我有一个字符串myFile,看起来像:Name_2019-11-29_D_HPSeries.txt。我需要提取下划线之间的字母D ...该字母可以是任何大写字母。现在,我正在使用两步Regex代码。

Dim bC As String = Regex.Match(myFile, "_[A-Z]+_").ToString
             boatClass = Regex.Match(bC, "[A-Z]+").ToString

这有效,但我相信可以用一行完成。我尝试了下面的代码,但没有用。

boatClass = Regex.Replace(myFile, "_[A-Z]_", "[A-Z]").ToString
regex vb.net
2个回答
0
投票

您可以使用积极的环顾四周方法来避免两步操作,检查字母前后的字符是否为下划线而不捕获它们:

Dim myFile AS String = "Name_2019-11-29_D_HPSeries.txt"
Dim bC As String = Regex.Match(myFile, "(?<=_)[A-Z](?=_)").ToString
Console.WriteLine(bc)

输出:

D

0
投票

您几乎只有一个字符A-Z,但是您可以将其包装在捕获组中,然后使用Match.Groups属性。

_([A-Z])_

Regex demo | VB.Net Demo

例如

Dim myFile AS String = "Name_2019-11-29_D_HPSeries.txt"
Dim bC As String = Regex.Match(myFile, "_([A-Z])_").Groups(1).Value
Console.WriteLine(bc)

结果

D
© www.soinside.com 2019 - 2024. All rights reserved.