Регулярное выражение для совпадения числа в строке, заключенной в квадратные скобки или скобки - PullRequest
1 голос
/ 27 марта 2020

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

Jim Bob Smith [1975] 
Joe Bob Public (1955)

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

У меня есть попробовал

(?<=\[).+?(?=\]) and
(?<=\().+?(?=\))

Так что мне нужна помощь, чтобы найти способ объединить оба. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Попробуйте

.*?[[(](\d{4})[])]

См. здесь

  1. .*? - не жадный любой символ
  2. [[(] для любого открытия цитата
  3. (\d{4}) - создает желаемую группу захвата 4 ди git.
  4. [])] для каждой закрывающей цитаты
1 голос
/ 27 марта 2020

Вы можете использовать следующее. NET регулярное выражение:

(?:(\()|\[)(.*?)(?(1)\)|])

См. Демоверсию регулярного выражения

Подробности

  • (?:(\()|\[) - группа без захвата , которая соответствует и захватывает в Группу 1 символ (, в противном случае просто соответствует символу [
  • (.*?) - Группа 2: любые 0 или более символов, кроме символа новой строки, как можно меньше (вместо .*?, вы можете использовать \d+ там, чтобы соответствовать 1 или более цифрам, или \d{4}, чтобы соответствовать только четырем точно цифры или даже (?:20|19)\d{2} для совпадения года в 20-м и 21-м c.)
  • (?(1)\)|]) - условная конструкция : если сопоставлена ​​группа 1, a ) совпадает, иначе, ] char.
...