【发布时间】:2016-02-07 01:10:45
【问题描述】:
我正在研究 perl 中的正则表达式,它标识了我想要的:单词结尾 g(但不跟在 'n' 之后)或 k(但不跟在 'r' 之后),在单词首字母 g 之前(但不是 l 或 r)、词首 k 或词首 c(但不是 i、e、y 或 h 之前的 c):
(((?<!n)g)|(?<!r)k)\s(g(?!l|r)|k|c(?!i|e|y|h));
但是,我希望它能够捕获以 g 或 k 结尾的单词,所以我尝试了这样的操作:
(^|\s.*(((?<!n)g)|(?<!r)k))\s(g(?!l|r)|k|c(?!i|e|y|h)); 以便 $1 捕获行的开头或空格(表示单词的开头),直到 g、k 或 c(单词的结尾)之前的下一个空格。也许这是一个括号问题,但我不确定如何保持我的分组,同时还指定我希望 $1 捕获的位置。
【问题讨论】:
-
在 What Have You Tryed 前面做得很好,但为了更清楚:您可以添加一些 To match 和 To Not match 单词吗?
-
是的,对不起!这里说几句废话。比赛:bog go,时钟枪,野猪风筝。不匹配:说话围棋、方舟胶、树皮抓斗。
-
您的情况相当复杂,似乎有点武断。这是为了家庭作业(如果是的话,那就太好了)还是你想解决一个现实世界的问题?如果这是一个现实世界的问题,我很好奇它是什么。自然语言处理之类的?
-
我对其他停止辅音之前的词尾软颚音很感兴趣——这个正则表达式是软颚音在软颚音之前的“控制”情况。我想将其与日冕和唇部之前的软膜进行比较(更具体地说,寻找这两者中的同化案例)。我正在使用的语料库不是按语音转录的,所以我正在使用正字法。感谢您的关注!
-
这是一个很好的例子,说明了为什么“单一魔法正则表达式”是一件坏事。