正则表达式 - 拆分每个字符,除非 #N?
RegEx - Split Every Charachter Unless #N?
我希望将一个字符串单独拆分成单独的字符,但不应拆分数字序列,并且后面跟有 n
的数字不应该是 split
因此 4h12u/o15n
将拆分为:
4
h
12
u
/
o
15n
我试了好几种方法都没有用。
(?!\dn)
你可以尝试用这种模式分割:
(?:^|(?<=\d)n|$)(*SKIP)(*FAIL)|
回溯控制动词的组合(*SKIP)(*FAIL)
强制模式失败并且不重试左侧位置。 (*SKIP)
表示如果模式失败,请不要重试所有在我左边匹配的。 (*FAIL)
强制失败。
但是有一个更简单的方法:根本不拆分!
您可以通过简单的全球研究获得相同的结果:
\dn|.
更传统的分割方式:
(?<=\d)(?!n|$)|(?<!\d|^)(?=n)|(?<!\d|^)(?!n|$)
试试这个:
(?<!\d)|(?!n)
这将在 不跟在数字后面, 或 不在 'n' 之前的每个位置拆分。
使用split
时需要指定分隔符。在这种情况下没有实际的分隔符,因此 split
不是完成这项工作的最佳工具。正则表达式匹配是。
my @a = /\d+n?|./g;
并不意味着它不能使用 split
来完成。
# Between non-digit and following digit, and
# Between digit and following non-digit other than "n".
my @a = split /(?<=\D)(?=\d)|(?<=\d)(?=[^\dn])/;
知道 split
不会尝试在字符串的开头拆分,并且知道 split
默认删除空尾随字段,以上可以简化为
my @a = split /(?<!\d)|(?!\dn)/;
我希望将一个字符串单独拆分成单独的字符,但不应拆分数字序列,并且后面跟有 n
的数字不应该是 split
因此 4h12u/o15n
将拆分为:
4
h
12
u
/
o
15n
我试了好几种方法都没有用。
(?!\dn)
你可以尝试用这种模式分割:
(?:^|(?<=\d)n|$)(*SKIP)(*FAIL)|
回溯控制动词的组合(*SKIP)(*FAIL)
强制模式失败并且不重试左侧位置。 (*SKIP)
表示如果模式失败,请不要重试所有在我左边匹配的。 (*FAIL)
强制失败。
但是有一个更简单的方法:根本不拆分!
您可以通过简单的全球研究获得相同的结果:
\dn|.
更传统的分割方式:
(?<=\d)(?!n|$)|(?<!\d|^)(?=n)|(?<!\d|^)(?!n|$)
试试这个:
(?<!\d)|(?!n)
这将在 不跟在数字后面, 或 不在 'n' 之前的每个位置拆分。
使用split
时需要指定分隔符。在这种情况下没有实际的分隔符,因此 split
不是完成这项工作的最佳工具。正则表达式匹配是。
my @a = /\d+n?|./g;
并不意味着它不能使用 split
来完成。
# Between non-digit and following digit, and
# Between digit and following non-digit other than "n".
my @a = split /(?<=\D)(?=\d)|(?<=\d)(?=[^\dn])/;
知道 split
不会尝试在字符串的开头拆分,并且知道 split
默认删除空尾随字段,以上可以简化为
my @a = split /(?<!\d)|(?!\dn)/;