我试图通过一些文本解析,使用正则表达式搜索不同的编程语言名称,如python、java等。不幸的是,regex并不是我完全满意的东西,但是为多个字母的语言找到想要的匹配是相当容易的。然而,当我试图匹配单个字母语言时,我遇到了一些困难。例如,下面是C语言的模式:
'\Wc[^\+#\w](\W|$)|\Wc$'
这是很好的工作,除了它也匹配目标-c。如果“c”前面有“objective”,是否有一种方法可以编写与之不匹配的模式?我也在用python编写我的程序,所以如果有更好的方法,我将非常感激有人指出这一点。
不应该匹配但应该匹配的字符串示例:
objective-d – alternative or supplement to objective-c
compile clojure to objective-c
它与我测试过的所有其他情况相匹配,除非目标-c出现在字符串中。
发布于 2014-01-23 07:38:47
re.compile(r'(?<!objective-)\bc\b',re.I)这个表达式不匹配:
objective-d – alternative or supplement to objective-c
compile clojure to objective-c并且确实匹配:
compile with c
c expression
compile c program
contains a c struct
strict C syntax(?<!...)是一个负查找断言,这意味着断言不是匹配的一部分,而是要求匹配之前不包含该表达式。
发布于 2014-01-23 07:41:25
我想您有一个包含所有语言名称的列表。
这是你想要的吗?
>>> txt = "objective-d – alternative or supplement to objective-c but not c or java,python"
>>> lang_names.sort(key=len, reverse=True)
>>> lang_names
['objective-c', 'python', 'c']
>>> regexp = re.compile("(?:^|\W)(" + "|".join(lang_names) + ")(?:\W|$)")
>>> matches = regexp.finditer(txt)
>>> for m in matches:
... print m.group(1)
...
objective-c
c
pythonhttps://stackoverflow.com/questions/21301223
复制相似问题