我有很多字符串,如:
Virtus.pro (13)
mousesports (16)
Natus Vincere (12)
正如您所看到的那样,在所有情况下,将名称与数字分开并不常见。 我是Regex的新手。有没有人有任何想法如何拆分这些字符串以包含2个变量?
Virtus.pro
和13
。那么mousesports
和16
?
正如您所看到的,Natus Vincere
在名称的两个部分之间有一个空格。
真的很挣扎,我只能提出一个正则表达式来提取数字。但这并不是每次都有效。
答案 0 :(得分:4)
我认为你正在寻找类似的东西:
$data = [
"Virtus.pro (13)",
"mousesports (16)",
"Natus Vincere (12)"
];
foreach ($data as $string) {
$matches = [];
preg_match('/(.*)\s\((\d+)\)/', $string, $matches);
list(, $team, $score) = $matches;
var_dump($team, $score);
}
输出:
string(10) "Virtus.pro"
string(2) "13"
string(11) "mousesports"
string(2) "16"
string(13) "Natus Vincere"
string(2) "12"
我们的想法是寻找一个子串,后跟一个空格,左括号,一些数字和一个右括号。领先的子字符串和数字在捕获组中被捕获,然后吐出到$team
和$score
。
答案 1 :(得分:1)
r'([a-zA-Z. ]+) (\(\d{1,2}\))'
我在python中试过这个,它对我有用。 你最好提供我认为的更多细节,例如,名称的格式,它包含哪种标点符号,数字,它有多少位数等等。
在我上面的回答中,名称字符串可以包含'。'和'',数字将是1或2位数。 你可以把它改成
r'([a-zA-Z. ]+) \((\d+)\)'
匹配一个您不知道它包含多少位数的数字。 它按顺序对匹配结果进行分组,第二组(索引1)是名称,第三组(索引2)是数字。
>>> import re
>>> are=re.compile(r'([a-zA-Z. ]+) \((\d{1,2})\)')
>>> d=are.search('Virtus.pro (13)')
>>> d.group()
'Virtus.pro (13)'
>>> d.group(1)
'Virtus.pro'
>>> d.group(2)
'13'
希望它有所帮助。
答案 2 :(得分:0)
嗨,你可以使用这样的东西
#!/usr/bin/env python
import re
regex = re.compile('^(.*)\((\d+)\)$')
my_match = regex.match('Virtus.pro (13)')
然后你可以这样做:
m.group(1) #to get 'Virtus.pro '
m.group(2) #to get '13'
这是在python btw
中实现的