正则表达式:查找给定的所有标点符号,仅当关键字存在时



是否有可能找到给定类型的所有标点符号,仅当关键短语存在时?

例如:

Lorem ipsum dolor sit met, consecent adiping elite。整型脉冲脉冲函数。前庭膨大,似非膨大门,脑门门静脉,但脑门门静脉。妊娠期,妊娠期,妊娠期,妊娠期,妊娠期,妊娠期。那是偶然的姿势。我是说,我是说,我是说,我是说,我是说,我是说。车灯属植物,可自由生长。Donec metuserat:maximus in risuseu:imperdiet:dignissim mauris。Aliquam是一种非常常见的疾病。Morbi a semneque。Nam tellus dolor, congue in mieu, laoreet soldales lectus。Fusce使用ullamcopper purus。木棒facilisi .

对于上面,只要"neque"是在文本,我想找到所有出现的":"

我试过这样做,但没有运气:

(.*nequeb.*)(?!^)([:])

这在我的系统中运行良好

解释
  1. 提取给定的短语并将其存储在一个变量中。

  2. 如果该短语存在,找到该符号并计算其出现次数。

    #!/bin/bash
    a="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer pulvinar ac augue nec auctor. Vestibulum eleifend, sem non placerat porttitor, urna neque pulvinar enim, ut ullamcorper massa libero nec tellus. Sed est massa, congue eu auctor gravida, efficitur sit amet lacus. Nullam tincidunt posuere sollicitudin. Sed ac ullamcorper risus, ac cursus justo. Phasellus vehicula quam nec libero venenatis venenatis. Donec metus erat: maximus in risus eu: imperdiet: dignissim mauris. Aliquam sit amet augue vel ex tincidunt convallis. Morbi a sem neque. Nam tellus dolor, congue in mi eu, laoreet sodales lectus. Fusce sed ullamcorper purus. Nulla facilisi."
    b=$(echo "$a"| grep -o  "neque"| head -1)
    echo $b
    if [  "$b" ==  "neque" ]
    then
    number_of_occurences=$(echo "$a"| grep  -o ":"| wc -l)
    echo "$number_of_occurences"
    fi
    

您想要的操作不清楚。我可以从你的例子中的亮点中读到,你想找到所有以:结尾的单词,但前提是单词neque存在于文本的任何地方。假设是这种情况,您可以使用以下regex:

/(?=.*bnequeb)w+:/g

解释:

  • (?=.*bnequeb)-具有词边界的neque的正向查找,在文本中的任何位置;如果这个失败,整个正则表达式失败
  • w+:-查找后跟:的单词
  • 使用g查找所有出现在:后面的单词

编辑:在看到bash标记已经添加之后,这里是使用缩短字符串的shell脚本版本。第一个示例有neque关键字,第二个示例没有:

$ echo 'Urna neque metus erat: maximus in risus eu: imperdiet: dignissim.'
> | egrep 'bnequeb' | egrep -o 'w+:'
erat:
eu:
imperdiet:
$
$ echo 'Urna metus erat: maximus in risus eu: imperdiet: dignissim.'
> | egrep 'bnequeb' | egrep -o 'w+:'
$

解释:

  • 使用第一个egrep使用字边界过滤所需的关键字neque
  • 使用第二个带有-o标志的'egrep'提取:后面的单词

相关内容

最新更新