regex 什么是正则表达式(英语单词,数字,逗号分隔单词)?[关闭]

ykejflvf  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(168)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

2天前关闭。
Improve this question
假设我们有一个简单的文本文件,其中包含一些常见英语单词的信息,例如theandto

the 9243 (definite article adverb)
and 5196 (conjunction)
to 4951 (preposition;adverb)
a 4506 (
    indefinite
    article
    noun
    preposition
)
in 2822 {preposition,adverb}
is 2699 [verb,  infix_operator,  short_word]

在抓取此文件以获取有关基本英语单词的信息的上下文中,记录的正则表达式是什么?

carvr3hs

carvr3hs1#

您可以按照您提供的规则一点一点地构建这个正则表达式:

  • // a“record”被定义为三个由空格字符连接的东西

<record> : (<word>)\s(<number>)\s(<wcsvl>)

  • // a“word”是1个或多个字母

<word> : [A-Za-z]+

  • // a“number”定义为一个或多个阿拉伯数字0,1,...,9

<number> : [0-9]+

  • // a“wrapped list”是左定界符、列表和右定界符的串联

<wcsvl> : <left_delim><csvl><right_delim>

  • //“left delimiter"的定义:(QUANTIFY((1, 1), "(", "[", "{")

<left_delim> : [(\[{]

  • //“右分隔符”(QUANTIFY((1, 1), ")", "]", "}"))的定义

<right_delim> : [)\]}]

  • // a“逗号分隔值列表”定义为中缀分隔符分隔的单词

<csvl> : <word>(<infix_delim><word>)*

  • //一个“中缀分隔符”被定义为一个空格或冒号,或逗号,或类似的东西

<infix_delim> : [\s:,]
一旦你把规则转换成了实际的正则表达式,只需要在cascade中应用一些替换:

<record> : (<word>)\s(<number>)\s(<wcsvl>)
         : ([A-Za-z]+)\s([0-9]+)\s(<left_delim><csvl><right_delim>)
         : ([A-Za-z]+)\s([0-9]+)\s([(\[{]<word>(<infix_delim><word>)*[)\]}])
         : ([A-Za-z]+)\s([0-9]+)\s([(\[{][A-Za-z]+([\s:,][A-Za-z]+)*[)\]}])

这个正则表达式仍然需要一些调整,以完全工作,通过查看您提供的样本匹配数据,其中:

  • 和之间的可选空格<left_delim>
  • 标点字符<infix_delim>(如分号)
  • 和之间的可选空格<infix_delim>
  • 和之间的可选空格<right_delim>
  • “字符串开始”和“字符串结束”字符
  • 的可用字符中的下划线字符
  • 字符周围的字边界

如下所示:

^(\b[A-Za-z]+\b)\s([0-9]+)\s([(\[{]\s*\b[A-Za-z_]+([\s:,;]\s*[A-Za-z_]+\b)*\s*[)\]}])$

检查regex demo here

相关问题