正则表达式从CSS字体声明中提取字体系列列表

时间:2010-07-08 14:34:57

标签: .net regex csv

我正在尝试创建一个.NET Regex来解析CSS字体声明,该声明采用以下形式:

font: italic small-caps bold xx-small 3.0em "Times New Roman", Times, serif;

根据CSS规范,声明值的所有元素都是可选的,并且我已经成功创建了匹配前五个元素的Regexes(在所有不同的允许形式中),但是我在创建正则表达式时遇到了问题匹配字体名称列表,它始终是属性值中的最后一个元素。我不需要识别字体名称列表中的各个元素;我只是希望整个列表匹配。

字体名称列表是逗号分隔列表(元素之间有可选的空格),列表的每个成员都是单字名称或用引号括起来的多个单词。

到目前为止,我已经提出了以下表达式......

(?<NAME_LIST>(?<QUOTED_NAME>"[\w ]+")|(?<SIMPLE_NAME>\w+)(?:,\s*(?<QUOTED_NAME>"\w ]+")|(?<SIMPLE_NAME>\w+))*)

...但它会单独匹配列表中的每个成员,而不是匹配整个列表。

任何想法都会受到赞赏。

谢谢,

1 个答案:

答案 0 :(得分:1)

也许是这样的(假设你已经在这个位之前有一些正则表达式来匹配字体列表之前的东西)?

(?<FONTS>(?:['"]?(?:\w+\s*)+["']?(?:,\s*|\s*;))+)

请注意,这也与末尾的分号匹配,但可以使用字符串操作轻松修剪。

编辑:由于你只是在评估声明的值部分,你会想要这个正则表达式,这也有一些修复,因为我注意到我的原始模式的其他问题。

(?<FONTS>(?:\s*(?:(?:['"](?:\w|\s)+["'])|\w+)\s*(?:,|$))+)