RegEx搜索和替换模式

时间:2016-11-29 20:07:20

标签: regex

我需要搜索一个可以从一个文档更改为文档但是遵循某种模式的模式。该模式将始终为9个数字,后跟3个字母。它有时会在它们之间留出空间,有时则不会。以下是要搜索的文字示例:

  1. 009244828 FLE
  2. MID021087275
  3. 006386476JJK
  4. 002973303 JJK
  5. MNS 000110924
  6. MNS000110924
  7. 009244828PSC
  8. 001915657SCR
  9. 我目前的正则表达式如下:.+?(?=(JJK|FLE|PSC|SCR))。这将返回1,3,4,7和1号线。 8这样:1。

    1. 009244828 \ s
    2. 006386476
    3. 002973303 \ S
    4. 009244828
    5. 001915657
    6. 因为它应该但不会返回字母。我需要用字母返回这些行,如果它在那里则删除空格。我的返回结果应如下所示:

      1. 009244828FLE
      2. 006386476JJK
      3. 002973303JJK
      4. 009244828PSC
      5. 001915657SCR

1 个答案:

答案 0 :(得分:0)

让我们一步一步地构建你正在寻找的正则表达式。

您需要匹配的是:

  • 9位小数\d{9}
  • 可选的空白字符\s?
  • 3个大写字母[A-Z]{3}(如果字母可能是小写,请使用[a-zA-Z]{3}

总而言之,这个正则表达式几乎你想要的东西:

\d{9}\s?[A-Z]{3}

我说“差不多”因为它不会让你摆脱数字和字母之间的空间。为此,您需要将字母和数字放入捕获组中 - 之后,您可以简单地连接捕获的子字符串(使用$1$2\1\2的替换表达式)来获取正是你想要的。

(\d{9})\s?([A-Z]{3})

如果你想确保每个数字和字母组都在它自己的行上,只需将整个正则表达式包装在^$中,然后在这两个字符的模式下运行它匹配一行的开头/结尾,而不是整个字符串的开头/结尾。

^(\d{9})\s?([A-Z]{3})$