Я пытаюсь создать выражение RegEx, которое успешно проанализирует следующую строку:
"57" "testing123" 82 16 # 13 26 blah blah
То, что я хочу, это иметь возможность идентифицировать числа в строке. В настоящее время я использую следующее:
[0-9]+
который отлично разбирается. Однако, когда это становится сложно, если число в кавычках, например "57" или "тестирование123", я не хочу, чтобы оно соответствовало.
В дополнение к этому, что-либо после знака хэша ( "#" ), я не хочу ничего сопоставлять после знака хеша.
Итак, в этом примере совпадениями, которые я должен получить, являются "82" и "16". Ничто другое не должно совпадать.
Любая помощь по этому поводу будет оценена.
Вам должно быть проще создать 3 разных регулярных выражения, а затем создать логику, которая их объединяет:
. Регулярное выражение .Net может легко анализировать эту строку. Следующий шаблон должен соответствовать всем до комментария:
\A # Start of the string
(?>
(?<Quoted> # A quoted string
"" # Open quotes
[^""\\]* # non quotes or backslashes
(?:\\.[^""\\]*)* # but allow escaped characters
"" # Close quotes
)
|
(?<Number> # A number
\d+ # some digits
)
|
\s+ # Whitespace separator
)*
Если вы также хотите совместить комментарий, добавьте:
(?<Comment>
\# .*
)?
\z
Вы можете получить свои номера в одном Match
, используя все записи группы "Число":
Match parsed = Regex.Match(s, pattern, RegexOptions.IgnorePatternWhitespace);
CaptureCollection numbers = parsed.Groups["Number"].Captures;
Отсутствие этого шаблона - это, в основном, нецифровые токены строки, такие как 4 8 this 15that
, которые могут добавить некоторую сложность, в зависимости от того, как мы хотим, чтобы он работал.