【问题标题】:Splitting string containing letters and numbers not separated by any particular delimiter in PHP拆分包含字母和数字的字符串,在 PHP 中不被任何特定分隔符分隔
【发布时间】:2023-03-29 18:01:01
【问题描述】:

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

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

例如:

"Hi, my name is Bob. I m 19yo and 170cm tall"

应标记为:

- hi
- my
- name
- bob
- i
- 19
- yo
- 170
- cm
- tall

请注意,19yo 中的 19yo 之间没有没有空格。我主要用它来提取带有单位的数字。

简单地说,我需要的是一种通过数字或字母没有分隔符来“分解”每个包含数字的标记的方法。

'123abc' 将是 ['123', 'abc']

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

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

等等。

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


我发现了一些接近它的东西,但它是 C# 并且特别适用于日/月拆分。 How do I split a string in C# based on letters and numbers

【问题讨论】:

  • #只是好奇,你为什么需要这样提取?
  • 我可以看到这样做是为了创建动态 slug,但也可以只用空格/标点符号分隔。
  • @chasing-death 因为数据源(推特流)写入不一致
  • @Dutchie432:我对划界无能为力,因为我无法决定人们如何发布推文
  • @Akhyar Amarullah:我知道,但我正在回复Chasing Death

标签: php regex string algorithm nlp


【解决方案1】:

您可以使用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);

当匹配数字字母边界时,正则表达式匹配必须是零宽度。字符本身不得包含在匹配中。为此,zero-width lookarounds 很有用。

http://codepad.org/i4Y6r6VS

【讨论】:

  • 抱歉,没有明显地测试过它。不知道 codepad.org 存在。现在将使用它。
  • @d_inevitable 我真的不明白你以后的解释。这是否意味着您的正则表达式无法正确执行某些条件?
  • 不,我只是在解释前面的问题是什么,当有类似[a-z]\d 作为字母数字边界时。该表达式将从'ab12' 生成['a', 2],因为b1 将被解释为边界并因此被排除在外。
  • 还记得“下载 Concrete5 CMS”之类的案例。
【解决方案2】:

这个怎么样:

您使用正则表达式从字符串中提取数字,将它们存储在一个数组中,用某种特殊字符替换字符串中的数字,这将“保持”它们的位置。在解析仅由您的特殊字符和普通字符创建的字符串后,您会将数组中的数字输入到它们的保留位置。

只是一个想法,但恕我直言可能对你有用。

编辑: 尝试运行这个短代码,希望你能在输出中看到我的观点。 (此代码在键盘上不起作用,不知道为什么)

<?php
$str = "Hi, my name is Bob. I m 19yo and 170cm tall";
preg_match_all("#\d+#", $str, $matches);
$str = preg_replace("!\d+!", "#SPEC#", $str);

print_r($matches[0]);
print $str;

【讨论】:

  • 很有趣,但也让我有点困惑..你能给我一些额外的解释吗?
  • 答案已编辑,请查看。如果您需要更多解释,请询问,我睡后不支持整个解决方案;)
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多