用正则表达式分隔起始数字

时间:2018-07-19 13:18:12

标签: regex preg-match

我想将起始数字和字符串分开

01.text
2 - something
3 more

获得

array (
[0] => 01.text
[1] => 01
[2] text
)
array (
[0] => 2 - something
[1] => 2
[2] something
)
array (
[0] => 3 more
[1] => 3
[2] more
)

我尝试了

的正则表达式
^(\d+)\.+|\s+|-+(.*?)

但不能按预期工作。

我的问题是如何匹配.-,数字后是否有空格。

2 个答案:

答案 0 :(得分:1)

您的正则表达式使用的替换将与捕获组中的一个或多个数字相匹配,后跟一个点或空格字符,或者与该组中的|匹配的任何字符为零或多次非贪婪。

您可以将正则表达式更新为不使用替换|,并使第二组中的量词为贪婪。

在第一组中捕获一个或多个数字,然后在字符类中匹配您的字符,然后在另一个捕获组中匹配任何字符一次或多次:

^(\d+)[.\s-]+(.+)

Demo

答案 1 :(得分:1)

最好为要拆分的字符串提供模式。我知道有时候是不可能的。因此,此正则表达式可与所有情况匹配,并为您提供所需的数组

/^(\d+)[\.\-\s]*(.*)?$/

let rows = [
  "01.text",
  "2 - something",
  "3 more"
];
let regex = /^(\d+)[\.\-\s]*(.*)?$/;

for(let row of rows) {
  console.log(regex.exec(row))
}

无论如何,如果您知道文件中有更多分隔符,请添加到[\。\-\ s] *