Я использую следующее регулярное выражение
@"(?![iv][iv]?[i]?)(?![.])\b[a-z]+(['-][a-z]+)*[a-z]+\b"
чтобы соответствовать слову, которое соответствует следующим критериям:
- Имеет 2 символа или более (
[a-z]+(['-][a-z]+)*[a-z]+
, материал в скобках допускает использование дефисов/апострофов) - В них нет точек
(?![.])
(например, кандидат наук) - Не является словом, содержащим римские цифры I или V (
(?![iv][iv]?[i]?)
) (например, VII)
В целом это работает хорошо, но если одно из слов, скажем, Vivian
, это слово будет исключено. Похоже, что Vivian
исключено, потому что это слово с символами I и V. Я хочу запрограммировать отрицательный просмотр, который будет исключать только слова, состоящие ТОЛЬКО из I и/или V, например III или VII или V. Как я могу сделать отрицательный просмотр менее жадным?
?![.]
вы соответствуете не.
, а любому символу..
— это подстановочный знак, который соответствует чему угодно. Вам нужно использовать(?![\.])
- person rae1   schedule 28.01.2014.
, являются буквальными. - person seebiscuit   schedule 28.01.2014[.]
соответствует буквальной точке в .NET, как и в любом другом известном мне варианте. - person Alan Moore   schedule 28.01.2014