Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将2步正则表达式替换为1步正则表达式,以获得下划线之间的一个大写字母_Regex_Vb.net - Fatal编程技术网

Regex 将2步正则表达式替换为1步正则表达式,以获得下划线之间的一个大写字母

Regex 将2步正则表达式替换为1步正则表达式,以获得下划线之间的一个大写字母,regex,vb.net,Regex,Vb.net,我有一个字符串,myFile,看起来像:Name_2019-11-29_D_HPSeries.txt。我需要提取下划线之间的字母D…该字母可以是任何大写字母。现在我使用的是两步正则表达式代码 Dim bC As String = Regex.Match(myFile, "_[A-Z]+_").ToString boatClass = Regex.Match(bC, "[A-Z]+").ToString 这是可行的,但我相信只需一行就可以做到。我尝试了下面的代码,但不起

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

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

您可以使用正向环视来避免两步过程,即检查字母前后的字符是否为下划线,而不捕获它们:

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

您几乎只需要一个字符a-Z,但您可以将其包装在一个捕获组中,然后使用该属性

_([A-Z])_
|

比如说

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

... 或者
Dim bC=myFile.Substring(myFile.LastIndexOf(“\u”c)-1,1)
非常有效。我希望使用子字符串得到答案。现在我有两个选择…见下面的正则表达式答案。我不知道第一个指数可能是负数。谢谢尼克,效果很好。现在我对“向前看”和“向后看”有了更多的了解。我删除了+,因为我只想找一个大写字母。@EdJenkins不用担心-我很高兴能帮上忙。我不确定
+
,因为在你的问题中你只说了一个字母,但在你的正则表达式中你包含了
+
。我将编辑答案以删除它。
D