2015-11-15 2 views
0

у меня есть следующее регулярное выражение (?x:-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?), который работает для всего числа врегулярное выражение, чтобы захватить ряд

first -1.3 second 1.1e-2 third -1e-2 fourth -10 fith -0.1 sixth .3 done. 

но последний .3.

Я пытался сделать первую группу (?:0|[1-9]\\d*) необязательно, но это перерывает регулярное выражение. Как я могу заставить регулярное выражение работать во всех случаях?

ответ

1

Прежде всего. Ваш регулярное выражение является:

-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)? 

Вам не нужно (?x:...) группу, потому что ваше регулярное выражение не имеет никаких пробелов в нем, и вам нужно только, чтобы избежать обратной косой черты, когда вы пишете регулярное выражение в виде строкового литерала , Большинство респондентов будут знать, что вы имеете в виду, но иногда кто-то предполагает, что вы пытаетесь сопоставить буквальные обратные косые черты.

Теперь, что вам нужно сделать, это добавить еще одну альтернативу всему регулярному выражению:

-?(?:(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?|\.\d+) 

Если вы хотите, чтобы показатель степени, во всех случаях это сделать:

-?(?:(?:0|[1-9]\d*)(?:\.\d+)?|\.\d+)(?:[eE][+-]?\d+)? 

Каждый, при первой встрече с этой проблемой, ожидает, что будет более элегантный или умный способ, но нет.

+0

thans, это было именно то, что я искал – Denis

Смежные вопросы