我想从这个字符串中提取2件事:| 2013.10.10 FEL felsz
- regex ->日期字段->所需值将仅为
2013.10.10
(在本例中) - regex ->
2013.10.10
和felsz
之间的字符串字符串->所需的值将仅为FEL
字符串(在这种情况下)。
我尝试了以下正则表达式,但没有太大成功:
-
(.*?<p/s>.*?)(?=s)
-
(.*?<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
有些事我认为是理所当然的:
- 日期总是排在前面,是数字和句号的组合
- 日期后面总是跟一个空格
- 要捕获的单词后面总是跟一个空格
- 要捕获的单词不包含空格
假设FEL
始终是单个单词(即由空格分隔),您可以使用以下表达式:
(d{4}.dd.dd) ([^s]+) (.*)