Я думаю, вы неправильно понимаете, как работает split
- он ищет выражения в строке, которые соответствуют шаблону, и разбивает строку вокруг них, удаляя шаблон в процессе.См. Руководство .
. В вашем первом примере регулярное выражение [A-Za-z !,?._'@]+
соответствует каждому символу в строке, поэтому split
ничего не возвращает, поскольку по обе стороны от шаблона нет символов.
Во втором примере регулярное выражение [ !,?._'@]+
возвращает 10 подстрок, поскольку в строке есть 9 вхождений шаблона: (space)
, (space)
, (space)
, (space)
, (space)
,(space)
, ,(space)
, '
и (space)
(последний ?
не генерирует подстроку, так как после нее нет символов).Выходные подстроки: He
, is
, a
, very
, very
, good
, boy
, isn
, t
, he
.
Наконец, в третьем примере ([ !,?._'@]
) разница состоит в том, что ,(space)
, который был сопоставлен как один разделитель во втором примере (из-за +
в регулярном выражении), теперь сопоставляется как два: ,
и (space)
.Это приводит к дополнительной пустой подстроке в выходных данных. Выходные подстроки: He
, is
, a
, very
, very
, good
, boy
, (empty)
, isn
, t
, he
.
Я создал демо для rextester , которое выводит каждую из подстрок, чтобы вы могли увидеть это в действии.