拆分包含字母和数字的字符串,不用PHP中的任何特定分隔符分隔

akh*_*khy 5 php regex string algorithm nlp

目前我正在开发一个Web应用程序来获取Twitter流并试图通过我自己创建一个自然语言处理.

由于我的数据来自Twitter(限制为140个字符),因此缩短了许多单词,或者在这种情况下,省略了空格.

例如:

"Hi, my name is Bob. I m 19yo and 170cm tall"
Run Code Online (Sandbox Code Playgroud)

应该被标记为:

- hi
- my
- name
- bob
- i
- 19
- yo
- 170
- cm
- tall
Run Code Online (Sandbox Code Playgroud)

请注意,19yo19yo没有空间之间.我主要用它来提取单位数.

简单地说,我需要的是一种"爆炸"每个令牌的方法,这些令牌中有数字或数字,没有分隔符.

'123abc' 将会 ['123', 'abc']

'abc123' 将会 ['abc', '123']

'abc123xyz' 将会 ['abc', '123', 'xyz']

等等.

在PHP中实现它的最佳方法是什么?


我找到了接近它的东西,但它是C#,特别是日/月分裂.如何根据字母和数字在C#中拆分字符串

d_i*_*ble 8

你可以使用preg_split

$string = "Hi, my name is Bob. I m 19yo and 170cm tall";
$parts = preg_split("/(,?\s+)|((?<=[a-z])(?=\d))|((?<=\d)(?=[a-z]))/i", $string);
var_dump ($parts);
Run Code Online (Sandbox Code Playgroud)

与数字字母边界匹配时,正则表达式匹配必须为零宽度.角色本身不得包含在比赛中.为此,零宽度外观很有用.

http://codepad.org/i4Y6r6VS

  • 不,我只是在解释像[az]\d`这样的字母数字边界时的问题.该表达式将从''ab12'`产生`['a',2]`,因为`b1`将被解释为边界并因此被排除. (2认同)