首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单字母编程语言与正则表达式匹配困难

单字母编程语言与正则表达式匹配困难
EN

Stack Overflow用户
提问于 2014-01-23 06:46:37
回答 2查看 271关注 0票数 1

我试图通过一些文本解析,使用正则表达式搜索不同的编程语言名称,如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出现在字符串中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-23 07:38:47

代码语言:javascript
复制
re.compile(r'(?<!objective-)\bc\b',re.I)

这个表达式不匹配:

代码语言:javascript
复制
objective-d – alternative or supplement to objective-c
compile clojure to objective-c

并且确实匹配:

代码语言:javascript
复制
compile with c
c expression
compile c program
contains a c struct
strict C syntax

(?<!...)是一个负查找断言,这意味着断言不是匹配的一部分,而是要求匹配之前不包含该表达式。

票数 1
EN

Stack Overflow用户

发布于 2014-01-23 07:41:25

我想您有一个包含所有语言名称的列表。

这是你想要的吗?

代码语言:javascript
复制
>>> 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
python
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21301223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档