(मामले में किसी को पोस्टिंग इसके बारे में एक उपयोग हो सकता है)।
मैं थोड़ा ओपी से अधिक परिष्कृत एक समस्या के लिए एक समाधान के लिए देख रहा था - बढ़ती संख्या
जैसे के साथ एक ही बात से संख्या के साथ कुछ की प्रत्येक पुनरावृत्ति की जगह कुछ इस तरह की जगह:
<row id="1" />
<row id="2" />
<row id="1" />
<row id="3" />
<row id="1" />
इस द्वारा:
<row id="2" />
<row id="3" />
<row id="2" />
<row id="4" />
<row id="2" />
सके समाधान ऑनलाइन पाते हैं तो मैं ग्रूवी में अपने ही पटकथा लिखी (थोड़ा बदसूरत लेकिन काम करता है):
/**
* <p> Finds words that matches template and increases them by 1.
* '_' in word template represents number.
*
* <p> E.g. if template equals 'Row="_"', then:
* ALL Row=0 will be replaced by Row="1"
* All Row=1 will be replaced by Row="2"
* <p> Warning - your find template might not work properly if _ is the last character of it
* etc.
* <p> Requirments:
* - Original text does not contain tepmlate string
* - Only numbers in non-disrupted sequence are incremented and replaced
* (i.e. from example below, if Row=4 exists in original text, but Row=3 not, than Row=4 will NOT be
* replaced by Row=5)
*/
def replace_inc(String text, int startingIndex, String findTemplate) {
assert findTemplate.contains('_') : 'search template needs to contain "_" placeholder'
assert !(findTemplate.replaceFirst('_','').contains('_')) : 'only one "_" placeholder is allowed'
assert !text.contains('_____') : 'input text should not contain "______" (5 underscores)'
while (true) {
findString = findTemplate.replace("_",(startingIndex).toString())
if (!text.contains(findString)) break;
replaceString = findTemplate.replace("_", "_____"+(++startingIndex).toString())
text = text.replaceAll(findString, replaceString)
}
return text.replaceAll("_____","") // get rid of '_____' character
}
// input
findTemplate = 'Row="_"'
path = /C:\TEMP\working_copy.txt/
startingIndex = 0
// do stuff
f = new File(path)
outText = replace_inc(f.text,startingIndex,findTemplate)
println "Results \n: " + outText
f.withWriter { out -> out.println outText }
println "Results written to $f"
नोटपैड ++ प्रतिस्थापन गणित नहीं करते हैं, न ही regex करता है। – Amber
यदि यह संभव है, तो यह अविश्वसनीय रूप से कठिन है। नियमित अभिव्यक्तियों में संख्याओं की कोई अवधारणा नहीं है (इसलिए कोई +1 नहीं है) और डेटा को जमा करने का कोई आसान तरीका नहीं है जब आप रेगेक्स से मेल खाते हैं (इसलिए कोई "अगला" मैच नहीं है)। एक्सएसएलटी आपको यहां मदद कर सकता है, अगर आपको वास्तव में इसे स्वचालित करने की आवश्यकता है। –
@ अंबर नोटपैड ++ में सीमित रेगेक्स कार्यक्षमता है। – Karolis