/ / PowerShell RegEx सिलेक्ट-स्ट्रिंग के साथ किसी भी पंक्तियों को वापस नहीं करता है - रेगेक्स, पावरशेल

सिलेक्ट-स्ट्रिंग के साथ पावरशेल रेगेक्स किसी भी पंक्ति को वापस नहीं करता है - रेगेक्स, पावरहेल

इस रेग-एक्स परीक्षक का उपयोग करना: http://myregextester.com/index.php इंगित करता है कि मेरे रेगेक्स को काम करना चाहिए: regex:

{name:"(w*?)", rank:([d]+)},

नमूना डेटा पर कब्जा करने के लिए:

{name:"AARON", rank:77},
{name:"ABBEY", rank:1583},

यहाँ एक पॉवरशेल लिपि है जिसे मैं चलाने का प्रयास कर रहा हूँ, एक पॉवरशेल ग्रिड में जोंस जैसे डेटा को पार्स करने के लिए।

$regex = "{name:"(w*?)", rank:([d]+)},"

(Select-String -Path EmailDomains.as -Pattern $regex -AllMatches).matches |foreach {

$obj = New-Object psobject

$obj |Add-Member -MemberType NoteProperty -Name Rank -Value $_.groups[1].value

$obj |Add-Member -MemberType NoteProperty -Name Name -Value $_.groups[0].value

$obj

} |Out-GridView -Title "Test"

Reg-ex मानों को वापस करने के लिए कभी नहीं लगता है (मैं अपने एमएस रेगेक्स बनाम पर्ल रेगेक्स मिक्सअप का अनुमान लगा रहा हूं, लेकिन मैं "टी पहचान" कर सकता हूं), इसलिए मुझे यकीन नहीं है कि मुद्दा क्या हो सकता है। किसी भी मदद की सराहना की जाती है।

उत्तर:

जवाब के लिए 2 № 1

प्रश्न चिह्न अक्सर अलग होता हैविभिन्न वातावरणों में कार्यक्षमता (इस एक में, मुझे लगता है कि इसका मतलब है "पूर्ववर्ती चरित्र से 0 या 1 बार मिलान करें")। मुझे संदेह है कि यह पर्ल के समान ही है। इसके बजाय

"(w*?)"

प्रयत्न:

"([^"]*)"

उत्तर № 2 के लिए 1

आपकी अभिव्यक्ति:

(Select-String -Path EmailDomains.as -Pattern $regex -AllMatches)

MatchInfo ऑब्जेक्ट्स की एक सरणी देता है। सरणी के पास एक मिलान गुण नहीं है।

आपको Slect-Object कमांडलेट का उपयोग करके मिलान गुण का विस्तार करना है, फिर उसे अपनी पाइपलाइन के साथ पास करें:

Select-String -Path EmailDomains.as -Pattern $regex -AllMatches | select-object -expand Matches | foreach {

जवाब के लिए 0 № 3

मुझे नहीं लगता कि आपके रेगेक्स की समस्या है। माचिस प्रत्येक वस्तु पर एक संपत्ति है, जिसे Select-Object द्वारा लौटाया गया है, वस्तुओं के संग्रह पर नहीं।

$regex = "{name:"(w*?)", rank:([d]+)},"
$matches = (Select-String -Path .a.txt -Pattern $regex)

$matches | Select -ExpandProperty Matches | Select @{n="Name";e={$_.Groups[1].Value}}, @{n="Rank";e={$_.Groups[2].Value}}