Если вы удалите или замените одним символом недопустимые символы, у вас могут возникнуть столкновения:
& lt; abc - & gt; abc & gt; abc - & gt; abc
Вот простой способ избежать этого:
public static string ReplaceInvalidFileNameChars (строка s) {char [] invalidFileNameChars = System.IO.Path .GetInvalidFileNameChars (); foreach (char c in invalidFileNameChars) s = s.Replace (c.ToString (), "[" + Array.IndexOf (invalidFileNameChars, c) + "]"); return s; }
Результат:
& lt; abc - & gt; [1] abc & gt; abc - & gt; [2] abc
Вы можете сделать это
punct(u(a(t(i(on?)?)?)?)?)?
internat(i(o(n(a(l(i(z(a(t(i(on?)?)?)?)?)?)?)?)?)?)?)?
Это не действительно регулярное выражение, но я думаю, что его проще решить простым String.prototype.indexOf
методом
'punctuation'.indexOf(str) >= 0
Попробуйте следующее:
punct(u(a(t(i(o(n)?)?)?)?)?)?