正则表达式找到大写单词和代码字符串?

时间:2016-08-17 21:19:59

标签: regex

我希望在我们收到的一些ob告中将简单的短划线改为短划线。但是只有在死亡之城之后才会出现这种情况。

文字如下:

@M_DeathNoticeHed:Alex <\n>Ornelas
@M_DeathNoticeBod:ALAMO <\!-> Alex  Ornelas <\n>, 25,  died Tuesday,  Aug. <\n>16, 2016 at Alamo.  Me<\h>morial Funeral Home of  <\n>San Juan is in charge of ar<\h>rangements.

@M_DeathNoticeHed:Almaquire Cadena
@M_DeathNoticeBod:RIO GRANDE CITY <\!-> Almaquire  <\n>Cadena , 87,  died Tues<\h>day,  Aug. 16, 2016 at Pax <\n>Villa Hospice, in McAllen, <\n>TX.  Sanchez Funeral Home <\n> of  Rio Grande City is in <\n>charge of arrangements.

@M_DeathNoticeHed:AnaRose <\n>Collazi
@M_DeathNoticeBod:MISSION <\!-> AnaRose  <\n>Collazo , 44,  died Wednes<\h>day,  Aug. 17, 2016 at Mis<\h>sion Regional Medical Cen<\h>ter in Mission.  Virgil Wilson <\n>Mortuary of  Mission is in <\n>charge of arrangements.

@M_DeathNoticeHed:Andy Garza
@M_DeathNoticeBod:RIO GRANDE CITY <\!-> Andy  <\n>Garza , 21,  died Tuesday,  <\n>Aug. 16, 2016 at Chicago, <\n>IL.  Rodriguez Funeral <\n>Home of  Roma is in <\n>charge of arrangements.

请注意,每"@M_DeathNoticeBod: CITY""<\!->"符号表示我需要更改为短划线的短划线。

我的正则表达式代码未将"<\!->"与前一个城市和"@M_DeathNoticeHed:"一起选中。

@M_DeathNoticeBod:([^A-Za-z]*?[A-Z][A-Za-z]*)([^A-Za-z]*?[A-Z][A-Za-z]*) [<\!->]

它也没有选择包含3个名字的城市,如"RIO GRANDE CITY"。我选择这个是因为短划线出现在文件中我不想替换的其他位置。

如果我可以选择该部分,我可以在这里替换短划线。

3 个答案:

答案 0 :(得分:1)

这个正则表达式应该这样做:

@M_DeathNoticeBod:([A-Z ]*) (<\\!->)

答案 1 :(得分:0)

如果你关心的行总是以“@M_DeathNoticeBod:”开头,后面是死亡之城,接着是&lt;! - &gt;你希望更换,我认为简单的事情可以做到这一点:

(@M_DeathNoticeBod:.*)<\\!->

捕获组1将包含所有内容,直到第一个“&lt; \! - &gt;”,因此如果您正在进行搜索并替换,则只需将该正则表达式的每次出现替换为组1的内容(通常用'\ 1'表示,然后用短划线表示。

答案 2 :(得分:0)

我认为这就是你真正想要的:

(?<=@M_DeathNoticeBod:).+<\\!->

为了解释事情,括号内的第一部分(?<=@M_DeathNoticeBod:)是不参与匹配的正面观察,但确保尾随部分始终以该表达开头。

我的尾随部分.+应该捕获任何包含任何字符序列的城市名称,然后是&lt;! - &gt;分隔符,由<\\!->正则表达式捕获。