2016-12-22 2 views
0

Мне нужно заменить текст в большом текстовом документе, который следует за этим шаблоном.Заменить текст в большом текстовом документе с помощью regex

set @{VariableName} = dbo.XmlAssignAttributeValues({VariableName}, '/{NodeName}', '{PropertyName}', @{PropertyVariableName}) 

Примеры:

set @Xml = dbo.XmlAssignAttributeValues(@Xml, '/Xml','xmlAssemblyTimeInMilliseconds', @XmlAssemblyTimeInMilliseconds) 

В ...

set @Xml.modify('insert attribute xmlAssemblyTimeInMilliseconds {sql:variable("@XmlAssemblyTimeInMilliseconds")} into (/Xml)[1]') 

Это ...

set @StudentsXml = dbo.XmlAssignAttributeValues(@StudentsXml, '/Students', 'studentCount', @StudentCount) 

В ..

set @StudentsXml.modify('insert attribute studentCount {sql:variable("@StudentCount")} into (/Students)[1]') 

Это ...

set @ClassesXml = dbo.XmlAssignAttributeValues(@ClassesXml, '/Classes', 'ClassRank', @SomeSillyClassRank) 

В ...

set @ClassesXml.modify('insert attribute ClassRank {sql:variable("@SomeSillyClassRank")} into (/Classes)[1]') 

Редактировать # 1 Для дальнейшего уточнения: Так в моем тексте документа У меня есть много выражений SQL, которые взаимодействуют с XML-атрибуты. Поэтому в выражении set @ {VariableName} = dbo.XmlAssignAttributeValues ​​({VariableName}, '/ {NodeName}', '{PropertyName}', @ {PropertyVariableName}) У меня есть имя переменной, которое назначается моей базе данных в функции называемый dbo.XmlAssignAttributeValues. В этой функции передаваемые параметры - это имя переменной, которую я устанавливаю «@Xml», имя узла, к которому я пытаюсь получить доступ «/ NodeName», имя свойства, которое я пытаюсь вставить, и свойства Имя переменной DB.

Таким образом, то, что мне нужно сделать, л искать строку, которая соответствует формату "набор @TheVariableName = dbo.XmlAssignAttributeValues ​​(@TheVariableName, '/ TheNodeName', '' ThePropertyName, @ThePropertiesVariableName" TO «установить @AnyVariableName .modify ('@ TheVariableName ThePropertyName {SQL: переменная ("@ ThePropertiesVariableName")} в (/ TheNodeName) [1]!')? Надеюсь, что очищает вещи более

Как это сделать с помощью регулярных выражений в C#

+1

Можете ли вы объяснить, используя слова, что вы пытаетесь сделать? Трудно перестроить правила из ваших примеров. – Blorgbeard

+0

@Blorgbeard Конечно! Поэтому в моем текстовом документе у меня есть много выражений SQL, которые взаимодействуют с атрибутами XML. Таким образом, в выражении множества @ {VARIABLENAME} = dbo.XmlAssignAttributeValues ​​({VariableName}, '/ {NodeName}', '{PropertyName}, {@} PropertyVariableName) У меня есть имя переменной, которая назначена на мой базы данных в функции, называемой dbo.XmlAssignAttributeValues. В этой функции передаваемые параметры - это имя переменной, которую я устанавливаю «@Xml», имя узла, к которому я пытаюсь получить доступ «/ NodeName», имя свойства, которое я пытаюсь вставить, и свойства Имя переменной DB –

+0

Вы должны изменить свой вопрос, чтобы добавить эти детали - форматирование намного лучше. – Blorgbeard

ответ

1

Как это сделать с помощью регулярных выражений в C#?

  1. Вы создаете регулярное выражение, соответствующее всем вашим входам. Поместите те части ввода, которые вы хотите повторно использовать в группы, включив их в круглые скобки.

  2. Вы называете Regex.Replace и относятся к группам с помощью $1, $2 ...

Пример: Допустим, вы хотите, чтобы заменить текст формы Set @{VariableName} = по Declare {VariableName}, т.е. Set @foo = должен стать Declare foo.Тогда вы бы:

  1. Создать регулярное выражение - в этом случае было бы ^Set @([a-zA-Z0-9]+) =$, а затем

  2. применять его с Regex.Replace:

    output = Regex.Replace(input, "^Set @([a-zA-Z0-9]+) =$", "Declare $1", 
             RegexOptions.Multiline); 
    

    Поскольку текст документа содержит несколько строк, вам необходимо использовать опцию Multiline, чтобы гарантировать, что ^ и $ соответствуют началу и концу строки , соответственно, вместо начала и конца самого документа.

Применяя эту технику до конца, ваш пример оставлен в качестве упражнения. Для первого шага обратите внимание на то, что есть lots of online regex testers available, что может помочь вам итеративно построить ваше регулярное выражение.

+0

Спасибо! Итак, чтобы уточнить мой второй вход в Regex. Заменить, в конечном счете, будет выражение регулярных выражений полной длины, которое я хочу использовать? –

+0

@BenJohnson: Именно. – Heinzi

Смежные вопросы