Регулярное выражение, C # - PullRequest
       9

Регулярное выражение, C #

1 голос
/ 21 декабря 2009

Мне нужна помощь по Регулярному выражению, чтобы найти тег / код под названием «WAITPHOTO» в тексте документа. В зависимости от наличия тега WAITPHOTO я оберну текст вокруг изображения (слева / справа от изображения).
К вашему сведению, все теги, начинающиеся с PHOTO, будут заменены на Image во время выполнения.

У меня есть текст, который выглядит так:

Steps from the drive lead to a terrace with a stone balustrade and open views.  
Front door and double glazed side window lead to the: 
[PHOTOA]
This is text for PhotoA as WAITPHOTO code is followed.
[WAITPHOTO]
SITTING ROOM: 5.11m x 4.61m. Double glazed patio doors to front     
terrace, with open views across Babbacombe. Double glazed window. Television 
aerial point. One screened radiator. One double radiator. 
[PHOTOB]
This text is NOT for PhotoB as WAITPHOTO code is not followed.

Steps from the drive lead to a terrace with a stone balustrade and open views.  
Front door and double glazed side window lead to the: 
[PHOTOC]
This is text for PhotoC as WAITPHOTO code is followed.
[WAITPHOTO]

Мне нужно выяснить, является ли определенный тег изображения, а именно. [ФОТО] сопровождается тегом WAITPHOTO. Также необходимо убедиться, что определенный тег WAITPHOTO связан с текущим тегом PHOTO, а не с некоторыми другими следующими тегами PHOTO.

Может кто-нибудь, пожалуйста, направьте мне регулярное выражение для достижения выше.

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 декабря 2009

Это работает для меня:

(\[PHOTO.\]).*?(?<!\1.*?\[PHOTO.\].*)\[WAITPHOTO\]

Потому что я считаю, что регулярные выражения часто "только для записи":

Я пытаюсь сопоставить тег [PHOTOX], за которым следует как можно меньше текста (. *?) И [WAITPHOTO] в конце. Чтобы удовлетворить ваши потребности, перед конечным WAITPHOTO я добавил отрицательный вид, в котором говорится: «если есть [PHOTOX] между начальным тегом и WAITPHOTO, не получится.

1 голос
/ 21 декабря 2009

Это регулярное выражение сработало для меня: (\[PHOTO\w+\])([^\[]+)\[WAITPHOTO\]

Сгруппирует тег имени фотографии и примененный к ней текст.

Вот пример того, как его использовать:

string test = @"Steps from the drive lead to a terrace with a stone balustrade and open views.  Front door and double glazed side window lead to the: [PHOTOA]This is text for PhotoA as WAITPHOTO code is followed.[WAITPHOTO]SITTING ROOM: 5.11m x 4.61m. Double glazed patio doors to front     terrace, with open views across Babbacombe. Double glazed window. Television aerial point. One screened radiator. One double radiator. [PHOTOB]This text is NOT for PhotoB as WAITPHOTO code is not followed.Steps from the drive lead to a terrace with a stone balustrade and open views.  Front door and double glazed side window lead to the: [PHOTOC]This is text for PhotoC as WAITPHOTO code is followed.[WAITPHOTO]";
string regex = @"(\[PHOTO\w+\])([^\[]+)\[WAITPHOTO\]";
System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(test, regex);
foreach (System.Text.RegularExpressions.Match m in mc)
{
    System.Console.WriteLine(m.Value);
    System.Console.WriteLine("This is the photo name: " + m.Groups[1].Value);
    System.Console.WriteLine("This is the photo text: " + m.Groups[2].Value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...