Извлечение строк данных из строки с помощью RegEx - PullRequest
0 голосов
/ 01 февраля 2019

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

(3)_(9)--(11).(FT-2)
(10)--(20).(10)/test--(99)

Я пытаюсь Regex.Match (здесь я не знаю), чтобы получить список, подобный этому: Первый пример:

3
_
9
--
11
.
FT-1

Второй пример:

10
--
20
.
10
/test--
99

Итак, в скобках несколько цифр и любой текст между ними.Может кто-нибудь помочь мне сделать это в vb.net?Заданная строка возвращает этот список?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Это должно работать:

Dim input As String = "(3)_(9)--(11).(FT-2)"
Dim searchPattern As String = "\((?<keep>[^)]+)\)|(?<=\))(?<keep>[^()]+)"
Dim replacementPattern As String = "${keep}" + Environment.NewLine
Dim output As String = RegEx.Replace(input, searchPattern, replacementPattern)
0 голосов
/ 01 февраля 2019

Самый простой способ - использовать Regex.Split (сформулированный как небольшой консольный тест):

Dim input = {"(3)_(9)--(11).(FT-2)", "(10)--(20).(10)/test--(99)"}
For Each s As String In input

    Dim parts = Regex.Split(s, "\(|\)")

    Console.WriteLine($"Input = {s}")
    For Each p As String In parts
        Console.WriteLine(p)
    Next
Next
Console.ReadKey()

Таким образом, в основном мы имеем однострочник для части регулярного выражения.

регулярное выражение \(|\) означает: разделить в ( или ), где фигурные скобки экранированы с \ из-за их особого значения в регулярном выражении.

немного более короткое регулярное выражение [()], где нужные символыв [] приведет к тому же результату.

0 голосов
/ 01 февраля 2019

Один из вариантов - использовать Split метод [String]

"(3)_(9)--(11).(FT-2)".Split('()')

Другой вариант - сопоставить все, кроме ( и )

В качестве регулярного выражения этобудет делать [^()]+

разбивка

"[^()]" ' Match any single character NOT present in the list “()”
   "+"  ' Between one and unlimited times, as many times as possible, giving back as needed (greedy)

Вы можете использовать следующий блок кода для извлечения всех совпадений

Try
    Dim RegexObj As New Regex("[^()]+", RegexOptions.IgnoreCase)
    Dim MatchResults As Match = RegexObj.Match(SubjectString)
    While MatchResults.Success
        ' matched text: MatchResults.Value
        ' match start: MatchResults.Index
        ' match length: MatchResults.Length
        MatchResults = MatchResults.NextMatch()
    End While
Catch ex As ArgumentException
    'Syntax error in the regular expression
End Try
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...