我正试图从EDI文件中获取一些文本,用正则表达式。我得到了这个字符串/文本:
UNA:+.? '
UNB+UNOC:3+5790000120420:14+5790000181872:14+991111:1850+KuvertNr1234'
UNH+BrevNr5678+CONTRL:D:93A:ZZ:C0230Q+CTL02'
UCI+MEDREF01095+5790000181872:14+5790000120420:14+4'
UCM+1111MAN01095+MEDREF:D:93A:UN:H0130R+4'
FTX+VER+P00++EDI-brev med nummeret 1111MAN01095, afsendt 11/11 1999 kl 18.46 har \:ikke kunnet modtages. Horsens Sygehus, laboratoriet kan ikke modtage \:sygehushenvisninger. :Med venlig hilsen: IT-Hotline. Horsens Sygehus.Telefon 12345678.'UNT+5+BrevNr5678'UNZ+1+KuvertNr1234'
我需要FTX
文本。我得到了这个正则表达式:FTX\+([a-zA-Z]{2,4})\+([a-zA-Z0-9]{3})\+\+(.*?)'
但在EDIFACT中,?如果我加一个?”到正文
UNA:+.? '
UNB+UNOC:3+5790000120420:14+5790000181872:14+991111:1850+KuvertNr1234'
UNH+BrevNr5678+CONTRL:D:93A:ZZ:C0230Q+CTL02'
UCI+MEDREF01095+5790000181872:14+5790000120420:14+4'
UCM+1111MAN01095+MEDREF:D:93A:UN:H0130R+4'
FTX+VER+P00++EDI-brev med nummeret 1111MAN01095, afsendt 11/11 1999 kl 18.46 har \:ikke kunnet modtages. Horsens Sygehus, laboratoriet kan ikke modtage \:sygehushenvisninger. :Med venlig hilsen: IT-Hotline.?' Horsens Sygehus.Telefon 12345678.'UNT+5+BrevNr5678'UNZ+1+KuvertNr1234'
我的正则表达式就停在"char“了?。如何使用.*?但忽略“?’”在文中?Edifact可以是带\n的,也可以是不带\n的长字符串
标签:FTX\+([a-zA-Z]{2,4})\+([a-zA-Z0-9]{3})\+\+(.*?)'
2条答案
按热度按时间35g0bw711#
你可以用
参见regex demo。
FTX\+
-FTX+
字符串([a-zA-Z]{2,4})
-第1组:两到四个ASCII字母数字字符\+
- a+
字符([a-zA-Z0-9]{3})
-组2:三个ASCII字母数字字符\+\+
-++
字符串(.*?)
-组3:除换行符以外的任何零个或多个字符,尽可能少'(?<!\?')
-前面没有?
字符的'
字符。yrdbyhpb2#
另一种选择是使用否定字符类排除匹配
'
,并且仅在它前面直接有问号时才匹配它:最后一部分
([^']*(?:'(?<=\?.)[^']*)*)
匹配:(
捕获组[^']*
匹配'
以外的可选字符(?:
非捕获组作为整体部分重复'(?<=\?.)
匹配'
,并使用正向后查找在它之前Assert?
[^']*
匹配'
以外的可选字符)*
关闭非捕获组,并选择重复)
关闭捕获组'
按字面匹配Regex demo