【问题标题】:Regex to match post-alveolar consonants正则表达式匹配后肺泡辅音
【发布时间】:2021-01-27 06:56:41
【问题描述】:

我有一个名为 a.txt 的文本文件,其中包含以下元素:

fall#i#1    fall (as a fruit) (v.)  fall    jatuh   fall (as a fruit) (v.)  jatuh*  t͡ʃampaʔ
dog#n#1 dog dog anjing  dog anjing  ŋand͡ʒi
wing#n#1    wing    wing    sayap   wing    sayap   kopaʔ
fly#i#1 fly (v.)    fly (vb)    terbang fly (v.)    terbang tobaŋ
mosquito#n#1    mosquito    mosquito    nyamuk  mosquito    nyamuk  ɲamuʔ
flower#n#2  flower  flower  bunga (yg jadi buah), kuntum    flower  bunga*  buŋo
sky#n#1 sky sky langit  sky langit* ʔlaŋɪt

首先,我需要一个正则表达式来匹配具有最终后牙槽辅音的行,例如 [ŋɡʔ] 输出应该如下所示:

fall#i#1    fall (as a fruit) (v.)  fall    jatuh   fall (as a fruit) (v.)  jatuh*  t͡ʃampaʔ
wing#n#1    wing    wing    sayap   wing    sayap   kopaʔ
fly#i#1 fly (v.)    fly (vb)    terbang fly (v.)    terbang tobaŋ
mosquito#n#1    mosquito    mosquito    nyamuk  mosquito    nyamuk  ɲamuʔ

其次,我需要一个正则表达式来匹配开头的后牙槽字输出应该是这样的:

dog#n#1 dog dog anjing  dog anjing  ŋand͡ʒi
sky#n#1 sky sky langit  sky langit* ʔlaŋɪt

第三,我需要一个正则表达式来匹配元音之间的后齿槽,如下输出:

flower#n#2  flower  flower  bunga (yg jadi buah), kuntum    flower  bunga*  buŋo
sky#n#1 sky sky langit  sky langit* ʔlaŋɪt

我曾经在 Ubuntu 终端中使用这个正则表达式来匹配它们:

grep -P '\b[ʔŋɡk]|[ʔŋɡk]\b|[aiueo][ʔŋɡk][aiueo]' a.txt

但我找不到一个正则表达式来分别匹配它们我的意思是一旦在最后匹配后齿槽另一个正则表达式匹配只在开头和元音之间的另一个正则表达式匹配任何人都可以帮助我谢谢

p>

【问题讨论】:

  • @Peter Thoeny 你能回答这个问题吗,因为上一个问题已经结束了
  • 请删除上面的评论。你不能像这样给用户打电话:他们只有在对问题执行任何操作时才会收到通知(关闭、评论......)

标签: regex grep


【解决方案1】:

您可以使用的正则表达式是

grep -P '(*UCP)[ŋɡʔ]\b' file           # 1
grep -P '(*UCP)\b[ŋɡʔ]' file           # 2
grep -P '[aiɪueo][ʔŋɡk][aɪiueo]' file  # 3

在哪里

  • (*UCP)[ŋɡʔ]\b - 匹配 ŋɡʔ 后跟 Unicode 感知(由于 (*UCP) PCRE 动词)字边界
  • (*UCP)\b[ŋɡʔ] - 匹配 ŋɡʔ 前面带有 Unicode 感知(由于 (*UCP) PCRE 动词)字边界
  • [aiɪueo][ʔŋɡk][aɪiueo] 匹配 ŋɡkʔ 介于 aiɪuoo 和 @9876543443@ 之间 iɪ 不是同一个字母!)

grep demo

s='fall#i#1    fall (as a fruit) (v.)  fall    jatuh   fall (as a fruit) (v.)  jatuh*  t͡ʃampaʔ
dog#n#1 dog dog anjing  dog anjing  ŋand͡ʒi
wing#n#1    wing    wing    sayap   wing    sayap   kopaʔ
fly#i#1 fly (v.)    fly (vb)    terbang fly (v.)    terbang tobaŋ
mosquito#n#1    mosquito    mosquito    nyamuk  mosquito    nyamuk  ɲamuʔ
flower#n#2  flower  flower  bunga (yg jadi buah), kuntum    flower  bunga*  buŋo
sky#n#1 sky sky langit  sky langit* ʔlaŋɪt'
grep -P '(*UCP)[ŋɡʔ]\b' <<< "$s"
echo "----"
grep -P '(*UCP)\b[ŋɡʔ]' <<< "$s"
echo "----"
grep -P '[aiɪueo][ʔŋɡk][aɪiueo]' <<< "$s"

输出:

fall#i#1    fall (as a fruit) (v.)  fall    jatuh   fall (as a fruit) (v.)  jatuh*  t͡ʃampaʔ
wing#n#1    wing    wing    sayap   wing    sayap   kopaʔ
fly#i#1 fly (v.)    fly (vb)    terbang fly (v.)    terbang tobaŋ
mosquito#n#1    mosquito    mosquito    nyamuk  mosquito    nyamuk  ɲamuʔ
----
dog#n#1 dog dog anjing  dog anjing  ŋand͡ʒi
sky#n#1 sky sky langit  sky langit* ʔlaŋɪt
----
flower#n#2  flower  flower  bunga (yg jadi buah), kuntum    flower  bunga*  buŋo
sky#n#1 sky sky langit  sky langit* ʔlaŋɪt

【讨论】:

  • Stribizew 感谢您的回答,它工作得很好,我还有另一个问题,我只需要在列 T 上找到数据,但现在它需要从每一列中获取,有什么方法可以查看特定列?
  • @Arman 是的,但在这些情况下,建议使用仅支持 POSIX 的awk
  • 我已经接受了你的回答,Up 投票给你了,再次感谢你的回答,但你能否解释一下 awk 公式,它的作用与 grep -P 匹配单词与这些字符的作用相同具体专栏谢谢。
  • @Arman 如果我们假设字段/列用空格分隔,并且您需要查找匹配的列是第 7 列,您可以使用类似awk '$7 ~ /[ŋɡʔ]$/' file 的内容,请参阅demo
  • 感谢这一点,如果我们有制表符而不是空格,我们应该将 ~ 更改为 \t 吗?因为我有它的分隔符的文件是制表符
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2014-01-11
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
相关资源
最近更新 更多