【问题标题】:Find String in String backwards, starting from specific point从特定点开始向后查找字符串中的字符串
【发布时间】:2018-01-22 14:50:21
【问题描述】:

我有一个文本,我在这个文本中搜索一个文件。我通过搜索其扩展名找到它,但不知道文件名。 当我找到这个字符串时,我有扩展的索引 (indexof(".jpg"))

现在,我需要完整的文件名。我唯一知道的是文件名在“>”符号之后开始,但文件中有很多这样的符号。有没有办法例如在字符串中获取“>”的索引,从特定索引开始,然后向后?

【问题讨论】:

  • 你能用“>”分割字符串并测试结果中的每个项目,看看哪个最适合作为文件名吗?
  • 可以只使用正则表达式...类似于>.+\.(jpg)|(JPG)

标签: vb.net indexof


【解决方案1】:

试试这个正则表达式:

>([A-Za-z0-9-+. _]+[.]jpg)

或者更好:

>([^[\]\*\/\\<>|]+[.]jpg)

我可能遗漏了一个允许的字符,但这涵盖了大部分内容并且应该很容易修改。使用这样的表达式:

Public Iterator Function FindJPGFileNames(inpupText As String) As IEnumerable(Of String)
     For Each match In RegEx.Matches(inputString, ">([^[\]\*\/\\<>|]+[.]jpg)")
         Yield match.Groups(1).Value
     Next match
End Function

Public Function FindJPGFileNames(inpupText As String) As IEnumerable(Of String)
    Dim matches = RegEx.Matches(inputString, ">([^[\]\*\/\\<>|]+[.]jpg)")
    Return matches.Select(Function(m) m.Groups(1).Value)
End Function

【讨论】:

  • 谢谢,这也适用于同一字符串中的多个文件名吗?我首先从 indexof 开始,因为它允许我设置一个开始索引,并在处理第一个文件后继续下一个文件。
  • 是的。该函数将返回一个包含所有 .jpg 文件的序列
【解决方案2】:

或者另外我也找到了这个解决方案:

Private Function searchimages(ByVal s As String, ByVal ending As String) As List(Of String)
    Dim los As New List(Of String)

    Dim position As Integer = 0
    While position <> -1
        position = s.IndexOf(ending, position, StringComparison.CurrentCultureIgnoreCase)
        If position <> -1 Then

            Dim endPosition As Integer = position + ending.Length
            Dim startposition As Integer = s.LastIndexOf(">", position - 1, StringComparison.CurrentCultureIgnoreCase) + 1

            los.Add(s.Substring(startposition, endPosition - startposition))

            position = endPosition
        End If
    End While
    Return (los)
End Function

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多