Я хочу удалить скобки, которые заканчиваются точкой из строки. Я использую регулярные expresion - @"\([^)]+\)\."
он работает со строкой, как это - some text (some text) some (text).
, после регулярного выражения у меня есть строка - some text (some text) some
Но это не работает со строкой, как что - some text (some text) some (text (text) some).
Как это исправить?Кронштейны с точками, регулярные выражения
ответ
Просто изменить регулярное выражение, как показано ниже, чтобы соответствовать кронштейнами, который заканчивается .
@"\((?:[^()]*\([^()]*\))*[^()]*\)\."
Регулярное выражение: "Как это исправить"
\( '('
(?: group, but do not capture (0 or more
times):
[^()]* any character except: '(', ')' (0 or
more times)
\( '('
[^()]* any character except: '(', ')' (0 or
more times)
\) ')'
)* end of grouping
[^()]* any character except: '(', ')' (0 or more
times)
\) ')'
\. '.'
Традиционный ответ: вы не можете. Регулярные выражения не поддерживают отложенные конструкции. Это верно для большинства диалектов регулярных выражений.
Выражение двигатель .NET регулярна однако поддерживает балансировочные группы. С ними вы можете идентифицировать и обрабатывать гнездование.
Чтобы обработать вложенную конструкцию, вы должны определить ее шаблон открытия и закрытия, в вашем случае это скобки (
и )
, соответственно.
- открыт:
(?<paren>\()
- близко:
(?<-paren>\))
Придумайте это как своего рода счетчик с именем «скобка», который подсчитывает, когда он встречает (
и отсчитывает, когда он встречает )
(внутренне, это немного другое, но в качестве метафоры это достаточно).
Теперь те два может быть использована для определения содержимого скобок, т.е.
- либо ничего, кроме круглых скобок:
[^()]*
- или шаблона открытия
- или закрытия шаблона сверху
или, в одном выражении: (?:[^()]*|(?<paren>\()|(?<-paren>\)))+
Все регулярное выражение должно завершиться неудачей, когда счетчик не равен нулю в конце, т. Е. Скобки не сбалансированы. Чтобы это произошло, используется конструкция (?(paren)(?!))
(это условное, предназначенное для отказа при отсутствии непревзойденного paren
).
Ваша законченная выражение выглядит следующим образом (пробелы игнорируются)
\(
(?:
[^()]*
|(?<paren>\()
|(?<-paren>\))
)+
(?(paren)(?!))
\)\.$
Смотрите вживую: http://regexhero.net/tester/?id=feb992a2-cc5d-497a-9d4a-a10317487e46
Рекомендуемая литература:
- What are regular expression Balancing Groups? here on SO(почитайте его, это фантастика)
- MSDN: Grouping Constructs in Regular Expressions
- regular-expressions.info: Matching Nested Constructs with Balancing Groups
- Flagrant Badassery: Fun With .NET Regex Balancing Groups
- MSDN Blogs: Nested/Recursive Regex and .NET Balancing Groups
Thks много, метод очень интересную –
- 1. Регулярные регулярные выражения
- 2. регулярные выражения с Grep
- 3. регулярные выражения с RegularExpressionValidator
- 4. регулярные выражения с прошивкой
- 5. регулярные выражения с питоном
- 6. регулярные выражения
- 7. Регулярные выражения
- 8. Регулярные выражения
- 9. Регулярные выражения
- 10. Регулярные выражения
- 11. Регулярные выражения
- 12. регулярные выражения
- 13. Регулярные выражения
- 14. Регулярные выражения
- 15. Регулярные выражения
- 16. Регулярные выражения?
- 17. Регулярные выражения VBScript с использованием выражения OR (|)
- 18. javascript регулярные выражения с переменными?
- 19. Использовать регулярные выражения с Glib
- 20. Регулярные выражения с использованием .replace()
- 21. Регулярные выражения с вопросительным знаком
- 22. Регулярные выражения VB.Net с нулями
- 23. Регулярные выражения с файлом bat
- 24. Регулярные выражения с использованием условий
- 25. регулярные выражения поиска с XML
- 26. регулярные выражения с апача JMeter
- 27. фарси регулярные выражения с Руби
- 28. Регулярные выражения с частью URI
- 29. perl регулярные выражения с датой
- 30. Регулярные выражения с соответствующими скобками
Thks много попробовать это –