【问题标题】:How to detect the group of characters in a string using RegEx?如何使用 RegEx 检测字符串中的字符组?
【发布时间】:2019-06-10 21:33:21
【问题描述】:

我有如下字符串:

M0122PD12XS1, 
M1213234NW, 
M1213234EFA1.

我需要读取每个字符串中的最后两个/三个字符,如下所示。不管后面的数字如何,最后的字符后面最多有一个数字。 我需要按如下方式读取最后一个字符:

M0122PD12XS1 => XS
M1213234NW => NW
M1213234EFA1=> EFA

我使用了如下的正则表达式字符串,但是当接下来没有其他数字时,它只读取最后两个/三个字符。

Regex string : ".{0,0}\D*$".

感谢任何帮助。

【问题讨论】:

  • \D{2,3}(?=\d*$)[A-Za-z]{2,3}(?=\d*$)?
  • [AZ]{2,3}((?=\d\b)|(?=\r)|(?=\.)|(?=\b))
  • 这是正确的。

标签: regex


【解决方案1】:

这可能是你需要的:

.*[0-9]([a-zA-Z]+)

查看here 进行测试,查看here 进行可视化。

【讨论】:

  • 我只需要拉出最后两三个字符。字符后不需要数字。比如M123123XS1,我只需要XS。
  • @PCG 我输入了你提供的字符串,它按照你的要求工作。正则表达式甚至不匹配最后的数字,只有[a-zA-Z] 声明的字母
【解决方案2】:

我觉得应该是

([A-Z]{2,})(?:[,.\s\d]+)?$

如果行尾不需要标点,只需

([A-Z]{2,})(?:[\d]+)?$

[A-Z]{2,} 是 2 个或更多字母,[\d]+)? 是字符串末尾的可选数字。

【讨论】:

  • 为什么要混淆这么多? (?:[\d]+)? = \d*.
  • 我只需要最后两个/三个字符。但是您的脚本会提取最后一个字符的数字。
  • @PCG: 不,第二组开头有?:,所以结果就是[A-Z]{2,}。您可以尝试一下,没有比这更简单的了 :-) 正则表达式中没有像 take just the last one group 这样的东西,您需要以其他方式定义它。如果您不想要其余的(数字),只需添加 ?: 即可忽略它们。
【解决方案3】:

好问题,我们将在我们想要的两个或三个字母的右侧使用标点符号或空格,并带有一个简单的表达式:

[0-9]([A-Z]{2,3})([0-9])?[,.\s]

在其左侧,我们将使用现有数字作为左边界。

Demo

const regex = /[0-9]([A-Z]{2,3})([0-9])?[,.\s]/gm;
const str = `M0122PD12XS1, 
M1213234NW, 
M1213234EFA1.
M0122PD12XS1
M1213234NW
M1213234EFA1
`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

【讨论】:

  • 问题暗示结尾没有标点符号,我怀疑那些,. 只是“格式化”标点符号。
【解决方案4】:

[A-Z]{2,3}((?=\d\b)|(?=\r)|(?=.)|(?=\b))

查找 2 或 3 个字母字符 [A-Z]{2,3}

最多但不包括 (?=)

  • 单个数字,后跟单词边界 (?=\d\b)
  • 返回字符 (?=\r)
  • 句点字符 (?=\.)
  • 字边界 (?=\b)

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多