OriginalGriff
Я думаю, вам нужно это проверить: когда я попробую ваше регулярное выражение в Expresso или простом приложении:
string input = @"I want a Regex to detect sources like (Lee & others, 2012) I want a Regex to detect sources like (Lee & others, 2012) I want a Regex to detect sources like (Lee & others, 2012)";
string output = Regex.Replace(input, @"\(.*?\,\s\d\d\d\d([a-d]?)\)", "%%");
Console.WriteLine(output);
Я получаю именно то, что ожидаю, а вы просите:
I want a Regex to detect sources like %% I want a Regex to detect sources like %% I want a Regex to detect sources like %%
То есть он правильно распознает каждую пару скобок ("%%"есть только для того, чтобы вы могли видеть, что было удалено - он также отлично работает с"").
Поэтому взгляните на свои образцы данных и попробуйте сократить их до тех пор, пока у вас не будет минимального подмножества, которое все еще отображает проблему - это может быть не то, что вы думаете!
- Не могли бы вы примерить вот это:
и ее коллеги
(2013) использовали углеродное датирование для измерения
рост новых нейронов в мозге
люди в возрасте от 19 до 92 лет. Более 50 лет
назад, наземные испытания ядерных бомб
выброс углерода-14, или с-14, в атмосферу. Поскольку эти ядерные испытания были
запрещенные в 1963 году уровни с-14 в атмосфере снижались с регулярной и
хорошо известная ставка. Таким образом, измерение концентрации с-14 в нейронах
обеспечил” отметку времени " для нейронов, позволив исследователям определить, когда
нейроны были сгенерированы.
Сигнатура углерода-14 была безошибочной: Сполдинг и ее коллеги обнаружили
явные доказательства нейрогенеза после рождения и, по сути, на протяжении всей жизни. Они
также удалось вычислить скорость нейрогенеза в определенной области мозга,
называется гиппокамп, область мозга, участвующая в обучении и памяти. Он повернулся
оказалось, что в среднем каждый день генерируется 1400 новых нейронов. Ставка
с возрастом она лишь немного уменьшилась. Другие области мозга, однако, не проявлялись.
доказательства нейрогенеза.
Исследования нейрогенеза у людей и животных выявили ряд
интригующие находки. В настоящее время общепризнано, что новорожденные нейроны развиваются в
зрелые функционирующие нейроны, по крайней мере, в двух областях человеческого мозга-гиппокампе
и обонятельная луковица, отвечающая за восприятие запаха (Lee &others, 2012).
Эти вновь созданные"
Что ж, это тоже работает - он устраняет все, что находится между первой открытой скобкой и первой закрытой скобкой после запятой и пробела, - что именно вы и сказали ему сделать!
Один из способов решить эту проблему - использовать балансировочные группы - которые я *не * собираюсь объяснять: смех: - и попытаться удалить все, что находится внутри скобок, которые заканчиваются четырьмя цифрами:
\((?>\((?<c>)|[^()]+|\)(?<-c>))*(?(c)(?!))\d{4}\)
Но... регулярное выражение, вероятно, является неправильным подходом - вам может понадобиться более сложный процессор естественного языка, или вы, возможно, пропустите некоторые крайние случаи.
Я бы посоветовал вам получить копию
Экспрессо[
^]- это бесплатно, и он исследует и генерирует регулярные выражения.
- Я использую Эспрессо, извините, регулярное выражение, которое вы дали, вообще не работает..."
: doh: я пропустил, что он захватил первый (2013), но не второй ... были ли цифры в неправильном месте :O
Попробовать это:
\((?>\((?<c>)|[^()]*\d{4}|\)(?<-c>))*(?(c)(?!))\)
Что должно охватить оба случая. Прости за это ...
- Простите, я не совсем понял. Трудно ли вам обойтись без объяснения: добавление возможности 1 буквы после номера года? Когда-то я работал с регулярными выражениями и группами, но сейчас они не нужны..."
Попробуй:
\((?>\((?<c>)|[^()]*\d{4}[a-zA-Z]?|\)(?<-c>))*(?(c)(?!))\)
john1990_1
Не могли бы вы примерить вот это:
и ее коллеги
(2013) использовали углеродное датирование для измерения
рост новых нейронов в мозге
люди в возрасте от 19 до 92 лет. Более 50 лет
назад, наземные испытания ядерных бомб
выброс углерода-14, или с-14, в атмосферу. Поскольку эти ядерные испытания были
запрещенные в 1963 году уровни с-14 в атмосфере снижались с регулярной и
хорошо известная ставка. Таким образом, измерение концентрации с-14 в нейронах
обеспечил” отметку времени " для нейронов, позволив исследователям определить, когда
нейроны были сгенерированы.
Сигнатура углерода-14 была безошибочной: Сполдинг и ее коллеги обнаружили
явные доказательства нейрогенеза после рождения и, по сути, на протяжении всей жизни. Они
также удалось вычислить скорость нейрогенеза в определенной области мозга,
называется гиппокамп, область мозга, участвующая в обучении и памяти. Он повернулся
оказалось, что в среднем каждый день генерируется 1400 новых нейронов. Ставка
с возрастом она лишь немного уменьшилась. Другие области мозга, однако, не проявлялись.
доказательства нейрогенеза.
Исследования нейрогенеза у людей и животных выявили ряд
интригующие находки. В настоящее время общепризнано, что новорожденные нейроны развиваются в
зрелые функционирующие нейроны, по крайней мере, в двух областях человеческого мозга-гиппокампе
и обонятельная луковица, отвечающая за восприятие запаха (Lee &others, 2012).
Эти вновь созданные
OriginalGriff
Лучше всего, вероятно, использовать регулярное выражение и "интеллектуальную обработку": вы можете использовать регулярное выражение, чтобы определить только скобки и извлечь содержимое, а затем обработать содержимое, чтобы увидеть, выглядит ли оно как ссылка или "естественный английский".
Это довольно просто: замените "*\d{4} "на"+", и он будет соответствовать скобкам. Это постобработка, которая становится сложной, и это лучше всего не делать в регулярном выражении, которое вы хотите понять через шесть месяцев, когда найдете новый крайний случай!