【问题标题】:Match all words with a specific length [duplicate]匹配具有特定长度的所有单词[重复]
【发布时间】:2019-11-18 05:56:22
【问题描述】:

我想创建一个匹配具有特定长度的所有单词的正则表达式。
我拥有的字符串示例: "I ABCDE FGH IG KLMNOPQ RS T"
我想匹配长度小于 3 个字母的所有单词(在本例中为 IIGRST)。
以下是我制作的替代方案:
Alt1:
Regex: ( |^)([A-Z]{1,2})( |$):Link1
解释: 匹配长度为 2 或 1 个大写字母且前面有空格或字符串开头 (( |^)) 后跟空格或字符串结尾 (( |$)) 的任何单词。

问题是我得到了我不想要的空格的正匹配。我不匹配 T
Alt2:
Regex: \w{1,2}\b:Link2
解释:

匹配一个最多包含 2 个字符的单词,只要它是字符串的唯一内容
(我在这个answer找到它)

问题是我得到了每个单词(DEGHPQ)的最后两个字母的匹配项,这在我的情况下是错误的。

【问题讨论】:

  • 你的意思是(?<!\S)[A-Z]{1,2}(?!\S)regex101.com/r/ykA3r0/1
  • 这完全符合我的要求。请您发布一个带有一些解释的答案。谢谢!

标签: python regex


【解决方案1】:

如果您必须考虑空格,您可以匹配 1 或 2 个大写数字并使用环视来断言直接在左侧和右侧的不是非 whitspace char \S

如果大写字符被例如$AB#包围,它们将不会被匹配。

(?<!\S)[A-Z]{1,2}(?!\S)

Regex demo

【讨论】:

    【解决方案2】:

    你已经接近了!只需在前面添加一个\b 边界即可:

    \b\w{1,2}\b
    

    匹配:

    I ABCDE FGH IG KLMNOPQ RS T
    ~           ~~         ~~ ~          
    

    【讨论】:

    • 谢谢它正在工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多