Vb net Regex извлекает данные до указанного c ключевого слова или конца строки - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть несколько строк, таких как

    kw_CS_TABLE__FC29-001::details=MIN_CAT::title=xxxx
    kw_CS_TABLE__FC29-002::details=CAT to NSE
    kw_CS_TABLE__FC29-003::details=HAZMIN::

Я хочу получить только строку сведений (MIN_CAT, CAT в NSE, HAZMIN). Я использую регулярное выражение (?<=::details=)(.*)(?=::), это выглядит хорошо для первого и третьего случая. Но это не удается для второго случая. Я борюсь с признанием конца строки. Я использую команду |$, но в этом случае я получаю все предложения до конца файла. (? <= :: details =) (. *) (? = :: | $) </p>

kw_CS_TABLE__FC29-001::details=MIN_CAT::title=xxxx возвращает > MIN_CAT::title=xxxx

У меня много трудностей, чтобы понять регулярное выражение понятия, особенно потому, что я использую его только для определенного случая c. Я прочитал несколько уроков и постов, но ничего не решило мою проблему.

Спасибо

1 Ответ

0 голосов
/ 03 февраля 2020

Без регулярных выражений

Private Function GetDetailsFrom(line As String) As String
    Return  line.Split({"::"}, StringSplitOptions.None).
        Where(Function(item) item.StartsWith("details")).
        Select(Function(detail) detail.Split({"="c}).LastOrDefault()).
        FirstOrDefault()
End Function

Использование

Dim lines As String() = 
{
    "kw_CS_TABLE__FC29-001::details=MIN_CAT::title=xxxx",
    "kw_CS_TABLE__FC29-002::details=CAT to NSE",
    "kw_CS_TABLE__FC29-003::details=HAZMIN::"
}

Dim details = lines.Select(AddressOf GetDetailsFrom)

Console.WriteLine(string.Join(Environment.NewLine, details))
' MIN_CAT
' CAT to NSE
' HAZMIN
...