Я хочу иметь регулярное выражение, которое будет соответствовать числам, которым не предшествуют пробелы или знаки препинания, например:
Я придумал:
(?<![[:space:][:punct:]])\d+
Однако это не работает так, как я предполагал, что касается примеров, результаты следующие:
Я понимаю, почему он соответствует одиночным цифрам в последних двух примерах (потому что отрицательный просмотр включает только пробелы и знаки препинания), однако я не уверен, как изменить свое регулярное выражение, чтобы исключить эти совпадения. Как это можно исправить?
@revo Я был уверен, что пробовал это! Можете ли вы добавить свой комментарий в качестве ответа, чтобы я мог принять его?
Кажется, вы хотите сопоставить только число в начале строки или после буквы. Затем вы можете использовать (?<![^[:alpha:]])\d+ / (?<!\P{L})\d+. См. эта демонстрация регулярных выражений. Где вы используете регулярное выражение?





Причина частичного совпадения в том, что движок не знает точно, с чего он должен начать относительно ваших требований. Вы сообщаете движку, включив \d в класс символов:
(?<![[:space:][:punct:]\d])\d+
^^
Это регулярное выражение может помочь вам разделить введенную строку на две группы, где вторая группа ($2) — это целевое число, а группа один ($1) — нецифра за ним:
([A-Za-z_+-]+)([0-9]+)
Это может быть безопасно, если вы захотите использовать его для обработки текста.
Добавьте
\dк классу символов:(?<![[:space:][:punct:]\d])\d+