【问题标题】:Regular expression for extracting substring in the middle of a string用于提取字符串中间的子字符串的正则表达式
【发布时间】:2016-03-17 20:39:42
【问题描述】:

在我的字符串中寻找一个在不同位置提取多个字符的正则表达式。例如,我正在使用的字符串是 5490028400316201600008,它始终是相同的长度,但数字可以改变。
我想提取前 9 个字符,然后跳过接下来的 8 个,提取接下来的 4 个,然后忽略最后一个字符。在这种情况下,生成的字符串将为5490028400000。我似乎找不到一种简单的方法来做到这一点,而且我对正则表达式还很陌生。提前感谢您的建议/帮助。

【问题讨论】:

  • 你真的需要正则表达式吗?似乎更像是您使用任何语言的标准字符串操作的案例。
  • 欢迎来到!我建议您从regular-expressions.info 了解正则表达式。还要提及您正在使用哪种编程语言进行此操作。最后发布您的代码或尝试解决此问题。
  • 你不需要正则表达式,你可以直接说 final_str=str[0:9]+str[18:22]+str[22:-1]

标签: regex


【解决方案1】:

首先,这似乎更适合子字符串函数,它们通常更快且不易出错。但是,出于学习目的,您可以想出一些东西。喜欢:

(.{9}).{8}(.{4}).

这匹配 any (不仅是数字,即 - 数字使用 \d 代替)字符 9 次,将其保存在一个组中,匹配另外 8 个不会保存的字符,并且最终会将另外 4 个字符匹配到第二组中。
合并$1$2(在你的情况下为5490028400000),你应该没问题。
看到这个demo on regex101.com

【讨论】:

  • 感谢您的反馈和建议。我使用的语言是 C++,所以我不确定上面/下面的建议是否有效。感谢“regular-expressions.info”链接,我也一定会看看的。
  • 我在这方面取得了一些进展,我正在使用 "(^\d{9})" 来捕获字符串中的前 9 个字符。现在,我只需要找到一种方法来捕获字符 18-21。我正在使用的软件只允许我输入正则表达式,我不允许使用 $1 或 $2 进行连接。因此,我是否可以添加一个简单的表达式来抓取位置 18-21 中的任何数字?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多