Regex reWord = new Regex("\\b[A-Za-z]*?(a.*z)[A-Za-z]*\\b");
... это вернет "Организацию Атлантического Договора", а захват из. *
z будет "Организацией против Договора".
Проблема присуща вашему методу - если вы не проанализируете предоставленное пользователем «регулярное выражение» для *
z (или. *
z, что не совсем понятно из вашего поста), изменив *
на [ ^ \ S] *
? как предлагает Сванте (или, может быть, \ w *
?), вы сожрете гораздо больше символов, чем вам нравится.
". *
" - это вообще плохая идея, когда вы пытаетесь быть конкретным. Это будет соответствовать всему, кроме новой строки, и вы ничего не можете добавить к этому, что остановит это.
Regex reWord = new Regex("\\b\\w*?(a\\w*?z)\\w*\\b");
... вернется просто "Организация".
В качестве альтернативы, если вы абсолютно обязаны , по какой-либо причине избегайте изменения предоставленного пользователем регулярного выражения, возможно, попробуйте разбить ваши строки на массив слов и проверить каждое слово отдельно от регулярного выражения.
В конечном счете, это ГИГО - мусор входит, мусор выходит. Накормите свою систему плохим регулярным выражением, и если вы не исправите это должным образом, вы не получите то, что искали.