我想找到一个正则表达式公式,以便找到所有以un|unui|o|unei
任何单词开头的单词,但之后的单词具有连接元素"de"
unui model de amintire
un pericol de inundatie
o carte plina de inspiratie
unei casete de sticla
摘自正文:
Trebuie sa ma dedic unui model de amintire care sa ma faca sa ma simt bun. Trebuie, mai ales, sa evit un pericol de inundatie care poate afecta fizicul. Am citit chiar azi o carte plina de inspiratie care m-a facut sa ma simt erou. Sunt prizonierul unei casete de sticla care nu se va sparge niciodata.
结果仅能查找,不能替换:
model
pericol
carte plina
casete
我的正则表达式不太好。
寻找: un|unui|o|unei(.*?)de\x20\w+
答案1
编辑为了满足更新的要求,即当单词出现在不同的(可能是英语)句子中时不匹配:
\b(?:un|unui|o|unei)\s+\K[^.?!]+?(?=\s+de\b)
唯一的变化是.+?
->[^.?!]+?
现在以非贪婪的方式匹配除 之外的任何内容.
。!
?
最简单的方法是借助\K
:
\b(?:un|unui|o|unei)\s+\K.+?(?=\s+de\b)
解释:
\b(?:un|unui|o|unei)
- 将模式的开头替换为非捕获组,前面是字边界\s+
- 后面有任意数量的空格\K
- 从此位置开始匹配.+?
- 任何非贪婪匹配(?=\s+de\s+)
- 正向预测de
以任何空格开头并以任何类型的单词边界结尾的单词
如果您只想查找中间的单词,那就这样吧。如果您想替换它们,使用捕获组会更简单(刚刚添加的其他解决方案围绕它展开)。
答案2
- Ctrl+H
- 找什么:
^(?:un|unui|o|unei)\h+(.+?)\h+de\h+.+$
- 用。。。来代替:
$1
- 打钩 相符
- 打钩 环绕
- 选择 正则表达式
- 取消勾选
. matches newline
- Replace all
解释:
^ # beginning of line
(?:un|unui|o|unei) # non capture group, one of these words
\h+ # 1 or more horizontal spaces
(.+?) # group 1, 1 or more any character but newline, not greedy
\h+ # 1 or more horizontal spaces
de # literally
\h+ # 1 or more horizontal spaces
.+ # 1 or more any character but newline
$ # end of line
截图(之前):
截图(之后):