Regex不在组中

nxagd54h  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(69)

我正试图从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})\+\+(.*?)'

35g0bw71

35g0bw711#

你可以用

FTX\+([a-zA-Z]{2,4})\+([a-zA-Z0-9]{3})\+\+(.*?)'(?<!\?')

参见regex demo

  • 详情 *:
  • FTX\+-FTX+字符串
  • ([a-zA-Z]{2,4})-第1组:两到四个ASCII字母数字字符
  • \+- a +字符
  • ([a-zA-Z0-9]{3})-组2:三个ASCII字母数字字符
  • \+\+-++字符串
  • (.*?)-组3:除换行符以外的任何零个或多个字符,尽可能少
  • '(?<!\?')-前面没有?字符的'字符。
yrdbyhpb

yrdbyhpb2#

另一种选择是使用否定字符类排除匹配',并且仅在它前面直接有问号时才匹配它:

FTX\+([a-zA-Z]{2,4})\+([a-zA-Z0-9]{3})\+\+([^']*(?:'(?<=\?.)[^']*)*)'

最后一部分([^']*(?:'(?<=\?.)[^']*)*)匹配:

  • (捕获组
  • [^']*匹配'以外的可选字符
  • (?:非捕获组作为整体部分重复
  • '(?<=\?.)匹配',并使用正向后查找在它之前Assert?
  • [^']*匹配'以外的可选字符
  • )*关闭非捕获组,并选择重复
  • )关闭捕获组
  • '按字面匹配

Regex demo

相关问题