Ваш шаблон не работает, потому что он соответствует только тексту в начале строки (см. Якорь ^
), тогда положительный прогноз (?=[+-/*])
требует, чтобы первый символ был оператором из указанного набора, но единственным оператором то, что вы потребляете, является необязательным -
. Таким образом, когда *
пытается сопоставить вложенную последовательность шаблонов во второй раз с -99+44+2+-3/3.2-6
, он видит +44
, а -?\d
не может сопоставить его (поскольку он не знает, как сопоставить +
с -?
). [+1128]
Вот как ваше регулярное выражение соответствует строке:
Вы можете токенизировать выражение, используя
let pattern = "(?
[1132 ] См. regex demo
Подробности
(? - слева от текущей позиции не должно быть цифр
-?
- необязательный -
\d+
- 1 или более цифр (?:\.\d+)?
- необязательная последовательность .
и 1+ цифр |
- или \D
- любой символ, кроме цифры. Вывод с использованием вашей функции:
Optional(["31", "+", "2", "-", "-3", "*", "43.8", "/", "1", "%", "(", "1", "*", "2", ")"])
К счастью, есть решение для Visual Studio 2010! Установите расширение Visual Studio 2010 Pro Power Tools и скопируйте / вставьте в OneNote, сохраняя подсветку синтаксиса. Сделал меня счастливым человеком;)
Ян Рулоф
У вас есть ударил гвоздь по голове о процессе. Приложение, которое вы вставляете, должно быть в состоянии правильно принять код с форматированием. MS Word является одним из немногих, кто обрабатывает это правильно, поэтому переход от VS -> Word -> OneNote будет работать. Но VS -> OneNote не работает.
Существует надстройка для Microsoft Visual Studio, которая позволяет копировать исходный код, выделение синтаксиса и номера строк в формате HTML.
С помощью этой надстройки вы можете копировать из VS и вставлять HTML прямо в вашу цель.
Проверьте это здесь: CopySourceAsHtml