2009-11-18 81 views
0

我一直与解析数据中提取完整的话,我有一个像字符串:使用正则表达式从文本

"Scottish Premier League (click here to open|close this coupon)" 

我想提取“苏格兰超级联赛”与Scottish匹配组1和Premier League匹配组2,使用正则表达式。

请告诉我使用正则表达式的方式。

MatchCollection matchCol = reg.Matches("Scottish Premier League (click here to open|close this coupon)"); 
+0

除了正则表达式,哪种语言将被用作解析器工作的“胶水”?另外,你可能不会把自己限制在这个苏格兰超级联赛,有没有类似的关键字/模式......? – mjv 2009-11-18 06:36:36

+3

这是什么标准?如果它只是第一个单词,则不需要正则表达式。然而,除此之外,任何事情几乎都是自然语言处理。 – Kobi 2009-11-18 06:37:05

回答

2

如果你只是想每一个特定的词匹配,那么你的正则表达式可能是这样的:

(Scottish) (Premier League) 

如果你想第一个字,然后接下来的两个匹配:

([\w]+) ([\w]+ [\w]+) 

写这是占了词与词之间的多个空格的另一种方式是:

(\w+)\s+(\w+\s+\w+) 
+0

这个解决方案,我会建议。完美的作品。 – 2009-11-18 06:52:22

+2

由于不需要将方括号放在单个字符的周围,并且只希望字符串的起始部分不是,所以最好写成'/ ^(\ w +)(\ w + \ w +)/',例如“这里“,”打开“ – dlamblin 2009-11-18 07:21:14

+0

@dlamblin - 好点。我也会将空格改为'\ s +'。 – Kobi 2009-11-18 07:23:54

1

/(苏格兰)(英超)/

+0

我必须解决的地点是苏格兰,然后我可以在取代苏格兰=>空后得到英超联赛。 感谢所有 – QuachNguyen 2009-11-18 06:55:01

0

既然你只给了这将是应用的正则表达式一个字符串,它是很难说,如果这个解决方案会为您的各种其他情况下工作:

/^(\w*) (.*) \(/ 
1

基本和直接:

$s = "Scottish Premier League (click ... coupon)"; 
$s =~ m/(Scottish) (Premier League)/; 
print "Match groups one and two: '$1' '$2'\n"; 

你可能想要更广义的匹配:

$s = "Generalized Matching on a string (click ... coupon)"; 
$s =~ m/^(\S+)\s(.+)\s+\(click/; 
print "Match groups one and two: '$1' '$2'\n"; 

这些是Perl;下次更具体。

另外,请帮助自己使用工具,如RegexBuddyExpresso

+0

我在编辑之前设置了-1(在5分钟的保证金范围内),现在它不会让我改变,对不起。尽管你为什么要包含第一个(显然完全是诙谐的)例子? – 2009-11-18 06:51:22

+0

@R。佩特。完全不是问题;当答案是一天或更长时,你会学会等待投票。回答你的问题:因为它是正确的。我不玩猜谜游戏来回答问题。 – dlamblin 2009-11-18 06:54:17