【问题标题】:Regular expressions to change a word with specific condition in perl正则表达式在perl中更改具有特定条件的单词
【发布时间】:2016-05-12 12:52:30
【问题描述】:

我正在尝试编写一个正则表达式,如果动词在 racine 中有 -e -i 字母,它将用 -icek 更改后缀 -ecek。例如,对于“gelecek”,我想获得“gelicek”。到目前为止,我有这个:

$phone46=~s/(e|i)ecek/icek/g;

我不想说 e 或 i 后跟 ecek,但我想说 e,i 后跟任何字母 +ecek。如何改进 (e|i) 部分以表明它们可以被任何字符跟随?

感谢您的帮助

【问题讨论】:

  • 听起来有点不清楚:试试s/(?:e|i)(\p{L}*)cek/i$1cek/g。请提供示例字符串和预期输出。
  • 应该允许多少个字母?只有一个?少于 5 个?
  • -ecek 是动词变位后缀。所以动词的racine可以有尽可能多的。例如对于 guvenicek,我想要 guvenicek。所以我只想说动词的racine中是否有e或i。

标签: regex perl shell


【解决方案1】:

我不确定我是否完全理解您的需求,但如何:

$phone46 =~ s/([ei][a-z]*)ecek/$1icek/g;

ecek之前有e,i followed by any letters时,这会将ecek替换为icek

【讨论】:

    【解决方案2】:

    我想你可以选择这样的:

    s/([ei][[:alpha:]]*)ecek\b/$1icek/g
    

    这匹配ei,后跟任意数量的字母字符[[:alpha:]],后跟ecek。括号中的部分被捕获并用于替换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多