我有以下字符串:“ C:\ Procesos \ rrhh \ CorteDocumentos \ Cortados \ 10001662-1_20060301_29_1_20190301.pdf”,我正在尝试获取此部分:“ 20190301”。问题是长度并不总是相同。这将是: “ 9001662-1_20060301_4_1_20190301”。
我已经尝试过:item.ToString.Substring(66,8),但有时不起作用。
我该怎么办?。
答案 0 :(得分:1)
这是我在评论中说的代码示例。
Sub Main()
Dim strFileName As String = ""
Dim di As New DirectoryInfo("C:\Users\Maniac\Desktop\test")
Dim aryFi As FileInfo() = di.GetFiles("*.pdf")
Dim fi As FileInfo
For Each fi In aryFi
Dim arrname() As String
arrname = Split(Path.GetFileNameWithoutExtension(fi.Name), "_")
strFileName = arrname(arrname.Count - 1)
Console.WriteLine(strFileName)
Next
End Sub
答案 1 :(得分:1)
您可以使用简单的正则表达式来实现这一点,它具有包括模式验证在内的附加好处。
如果您需要从文件名的末尾(在下划线之后)精确获取八个数字,则可以使用以下模式:
_(\d{8})\.pdf
然后是此VB.NET行:
Regex.Match(fileName, "_(\d{8})\.pdf").Groups(1).Value
重要的是要提到Regex默认情况下区分大小写,因此,为了防止出现“ pdf”匹配而“ PDF”不匹配的情况,可以按以下方式调整模式:
(?i)_(\d{8})\.pdf
您可以直接在任何表达式窗口中使用它:
PS:您还应该确保System.Text.RegularExpressions
参考在导入中:
答案 2 :(得分:0)
您也可以通过这种方式实现它:)
Path.GetFileNameWithoutExtension(Str1).Split(“ _” c).Last
Path.GetFileNameWithoutExtension
因此使用您的字符串,它将返回给您- 10001662-1_20060301_29_1_20190301
然后在字符串上方拆分,即基于 _ 的 10001662-1_20060301_29_1_20190301 ,并将返回字符串数组。
最后
关于.. !! AKsh