ABAP正则表达式中的贪心/非贪心量词



我想从这个字符串中提取2件事:| 2013.10.10 FEL felsz

  1. regex ->日期字段->所需值将仅为2013.10.10(在本例中)
  2. regex -> 2013.10.10felsz之间的字符串字符串->所需的值将仅为FEL字符串(在这种情况下)。

我尝试了以下正则表达式,但没有太大成功:

  1. (.*?<p/s>.*?)(?=s)
  2. (.*?<p/("[0-9]+">.*?)(?=s)

你有什么建议吗?

正如在注释中提到的,由于ABAP不允许与*?进行非贪婪匹配,如果您可以指望felsz只在您想要匹配的第二部分之后立即出现,则可以使用:

(d{4}.dd.dd) (.*) felsz

(PS: 无效的第一个答案:在支持*?的非abap系统中,以下正则表达式将把两个值都放到子匹配中。日期将在子匹配1中,另一个值(本例中为FEL)将在子匹配2中:' (d{4}.dd.dd) (.*?) felsz)

"felsz"是变量吗?留白可以变化吗?你的约会格式可以改变吗?如果不是:

| (d{4}.d{2}.d{2}) (.*?) felsz
否则

:

|s+?(d{4}.d{2}.d{2})s+?(.*?)s+?[a-z]+

然后访问捕获组1/2

d+.d+.d+

匹配给定字符串中的2013.10.10。说明及示范:http://regex101.com/r/bL7eO0

(?<=d ).*(?= felsz)

应该匹配FEL。说明及示范:http://regex101.com/r/pV2mW5

如果你想在捕获组中使用它们,你可以使用正则表达式:

| (d+.d+.d+) (.+?) .*

说明及示范:http://regex101.com/r/rQ6uU4

如何:

(?:d+.d+.d+s)(.*)s实际操作

匹配FEL

有些事我认为是理所当然的:

  1. 日期总是排在前面,是数字和句号的组合
  2. 日期后面总是跟一个空格
  3. 要捕获的单词后面总是跟一个空格
  4. 要捕获的单词不包含空格

假设FEL始终是单个单词(即由空格分隔),您可以使用以下表达式:

(d{4}.dd.dd) ([^s]+) (.*)

相关内容

  • 没有找到相关文章

最新更新