所以每次我需要一些清晰整洁的东西时,我已经使用Stackoverflow 4年了。
以下是这种情况: 我有一个文本文件,其中有两列由选项卡分隔,第一列是一种语言(例如法语),第二列是英语。
une ampoule \ t灯泡
我希望能够匹配\ t取决于多个因素,用\ t替换它和正确的文章(a / an / the):
对于第一个选项,我尝试了\t(?=[aeuio][^aeuio]+)(?<=^une|^un)
,发现notepad ++不支持lookbehinds,并上线了PERC引擎。即使在那里,它也不匹配任何东西。
答案 0 :(得分:0)
这是一种有效的模式:https://regex101.com/r/burYl1/2
^(une?.*\\t)(\s[^aeiou].*)|^(une?.*\\t)(\s[aeiou].*)|^((?:las?|les?).*\\t)(\s.*)
但是,一次替换所有三个只能在支持增强替换字符串条件的环境中完成(Sublime不支持此操作)。如果是我,我会为每个变化运行三次匹配。
$1 a $2
$3 an $4
$5 the $6
如果您需要替换条件,请告诉我,我会帮您解决。
答案 1 :(得分:0)
您可以使用
^((?:(une?)|(l(?:'[aeuioh]\w*|a|es?)))\h.*\t\h*)(([aeiou])|((?![aeiou])[a-z]))
并替换为$1(?{2}(?{6} a $6: an $5):(?{3}the $4))
。 确保未选中 Match Case
。
<强>详情
^
- 行的开头(
- 第1组开始:
(?:(une?)|(l(?:'[aeuioh]\w*|a|es?)))
- 两种选择中的任何一种:
(une?)
- 第2组:un
或une
(l(?:'[aeuioh]\w*|a|es?))
- 第3组:l
后跟'
和0+字词,或la
或le
或les
\h
- 水平空间.*
- 除了换行符之外的任何0 +字符,尽可能多\t
- TAB char \h*
- 0+水平空格)
- 第1组结束(([aeiou])|((?![aeiou])[a-z]))
- 第4组匹配两个替代方案:
([aeiou])
- 第5组:元音|
- 或((?![aeiou])[a-z])
- 第6组:辅音(除a
,e
,i
,o
,u
之外的任何字符替换模式详情
$1
- 在此处插入第1组值(?{2}
- 如果第2组匹配
(?{6}
- 如果第6组匹配
a $6
- 插入空格,a
,空格和第6组(辅音)值:
- 其他 an $5
- 插入空格,an
,空格和第5组(元音)值)
- 条件构造的结束:
- 其他(?{3}
- 如果第3组匹配
the $4
- 插入the
,空格和第4组值)
- 条件构造的结束)
- 条件构造的结束