这个RegEx有什么问题吗?

时间:2010-08-01 15:56:10

标签: c# regex

我在维基百科文章的XML转储上使用RegEx。

正则表达式是= {{[a-zA-Z0-9_\(\)\|\?\s\-\,\/\=\[\]\:.]+}}

我想检测用{{}}包裹的所有文字。 但是,我没有检测到56个与{{的简单搜索相匹配的匹配,而是仅检测到45。

它未检测到的样本块是{{cite journal | last = Heeks | first = Richard | year = 2008 | title = Meet Marty Cooper - the inventor of the mobile phone | journal = BBC | volume = 41 | issue = 6 | url = http://news.bbc.co.uk/2/hi/programmes/click_online/8639590.stm | pages = 26–33 | doi = 10.1109/MC.2008.192 }} ..

但它检测到{{cite web | title = Of Cigarettes and Cellphones | last = Ulyseas | first = Mark | date = 2008-01-18 | url = http://www.thebalitimes.com/2008/01/18/of-cigarettes-and-cellphones/ | publisher = The Bali Times | accessdate = 2008-02-24 }}

任何人都可以检测到我的问题吗?

3 个答案:

答案 0 :(得分:2)

有些逃避是多余的,但我认为这不是真正的问题。

我建议尝试\w而不是a-zA-Z0-9_,尤其是因为在.NET中,正则表达式\w也识别Unicode字母(除非它符合ECMAScript标准模式)。

另一种选择是,如果文本部分不能包含}(现在它无论如何都不能),您也可以使用{{[^}]+}}

[^...]否定字符类[^}]匹配}以外的任何内容。

参考

相关问题

答案 1 :(得分:1)

你的角色类是......特别的。对于初学者来说,最后.涵盖了您匹配的所有内容。此外,花括号({})是特殊字符,因此应该对它们进行转义。最后,你需要在?之后添加+来强迫它不要贪婪,否则它将匹配大括号。

编辑:我不会试图回到我所说的内容,但我想指出我在这篇文章中几乎所有内容都是错误的(除了那些括号应该被转义,这只是一个问题好的做法)。

答案 2 :(得分:0)

正则表达式{{(.*?)}}在perl中对我很有用。它捕获2个嵌套大括号之间的所有内容。