混合大小写单词的正则表达式

混合大小写单词的正则表达式

我想要一个正则表达式来帮助我识别某个模式是否以混合大小写形式出现在句子中。

说:

狐狸跳上了岩石

现在,我想知道图案jumped中是否有小写字母。我怎样才能实现这个目标?

让我说得更清楚一些。我想要的是使代码文件中的关键字变成大写。为此,我需要识别尚未大写的关键字。

Replace理想情况下应该是这样REPLACE

但为了找到这样的情况,我应该能够识别一个单词是否存在小写字母。

答案1

printf %s\\n 'juMPEd'| sed 's/[^[:lower:]]//g'

输出

jud

答案2

Perl 可以相当容易地做到这一点:

$ echo 'Fox juMPed the rock' | perl -pe 's/jumped/\U$&/i'
Fox JUMPED the rock

它查找jumped不区分大小写的 ,并将其替换为大写版本。

答案3

您可以使用 grep -ioE 获取给定正则表达式的所有匹配项

$ echo "abc jumped def Jumped fgh JUMPED klm" > file.txt
$ grep -ioE "j\w+" file.txt > matches.txt
$ cat matches.txt
jumped
Jumped
JUMPED

现在,您可以迭代结果并删除完整的下/上匹配项 (bash):

$ for w in $(cat matches.txt); do if [[ ! $w == ${w^^} && ! $w == ${w,,} ]]; then echo $w; fi; done > mixed.txt
$ cat mixed.txt
Jumped

对于每个混合单词,您可以调用 sed 将给定匹配项大写

$ for w in $(cat mixed.txt); do sed -i "s:$w:${w^^}:g" file.txt; done

答案4

这可以完全在 shell 内通过构造完成case

string='Fox juMPed the rock'
case "$string" in
  *[:lower:]*) echo "The string contains lowercase letters.";;
esac

在 ksh 中,您可以使用typeset -u将字符串转换为大写。原件是否全大写并不重要。

string='Fox juMPed the rock'
typeset -u string
echo "SHOUTING: $string"

如果要处理文件,可以使用 awk 及其toupper函数将字符串转换为大写。您可以使用 测试是否s已经大写s == toupper(s),但您也可以使用toupper(s)不管。

相关内容