2016-08-11 4 views
0

Я следующее регулярное выражение я сопоставление с:Regex заменить строку, но сохранить оставшуюся часть строки

<dataHolder (.)* outId="(finishTime|startTime)" value="java.lang.String" 

Я хочу, чтобы изменить значение значения для «java.util.Date», но сохранить остальную часть линия.

т.е.

<dataHolder inputId="startTime" name="#FF54A7" type="basicType" outId="finishTime" value="java.lang.String" id="kycPreviousTaskEndTime"/> 

должны оказывать

<dataHolder inputId="startTime" name="#FF54A7" type="basicType" outId="finishTime" value="java.util.Date" id="kycPreviousTaskEndTime"/> 

Что заменить строку следует использовать для достижения этой цели? Я думаю, что это связано с использованием $?

+0

сделать из [захвата групп и обратно ссылки] (HTTP: //www.rexegg. ком/регулярное выражение-capture.html). –

+0

Моя проблема заключалась в использовании (.) * Вместо (. *) – IanWatson

+0

И было бы даже лучше, если бы вы добавили знак вопроса после звездочки, чтобы сделать его ленивым (не жадным). Однако лучше всего не полагаться на регулярные выражения для синтаксического анализа XML. Вместо этого используйте DOM API. – trincot

ответ

0

Это, как вы можете сделать это в Python:

import re 

txt = r'<dataHolder inputId="startTime" name="#FF54A7" type="basicType" outId="finishTime" value="java.lang.String" id="kycPreviousTaskEndTime"/>' 
txt2 = re.sub(r'value=".*?"', r'value="java.util.Date" ', txt) 

Регулярное выражение проще, чем раньше.

Вам нужно только заполнить для value=" и остальную часть текста до закрытия кавычек, а затем заменить его на свои вещи.

0

Для управления XML более надежно использовать DOM API. Например, JavaScript предоставляет этот API следующим образом (но и многие другие языки имеют схожие интерфейсы): использование

var xml = '<dataHolder inputId="startTime" name="#FF54A7" type="basicType" outId="finishTime" value="java.lang.String" id="kycPreviousTaskEndTime"/>'; 
 

 
var doc = new DOMParser().parseFromString(xml, "text/xml"); 
 
doc.querySelector('dataHolder').setAttribute('value', 'java.util.Date'); 
 
var xml = new XMLSerializer().serializeToString(doc); 
 

 
console.log(xml);

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