क्या कोई कृपया नीचे दिए गए स्ट्रिंग से बोल्ड टेक्स्ट "इंग्लैंड" निकालने में मेरी मदद कर सकता है

\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.CLSM.IST

मैंने \\.*?\. की कोशिश की लेकिन फिर मुझे मिल गया

\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.

किसी भी तरह की सहायता को आभार समझेंगे

1
Rohit Kachroo 4 जुलाई 2018, 12:21

2 जवाब

सबसे बढ़िया उत्तर

पॉवर्सशेल में, आप बिना एक्सटेंशन के फ़ाइल नाम प्राप्त कर सकते हैं, स्ट्रिंग को . से विभाजित कर सकते हैं और पहले आइटम को पकड़ सकते हैं:

PS> $s = '\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.CLSM.IST'
PS> [System.IO.Path]::GetFileNameWithoutExtension($s).Split('.')[0]
england

यदि आपको किसी भी कारण से रेगेक्स की आवश्यकता है, तो मैं सुझाव देता हूं कि

.*\\([^.]+)

और समूह 1 मान ले लो। रेगेक्स डेमो देखें।

विवरण

  • .*\\ - अंतिम \ चार तक के सभी टेक्स्ट का मिलान करें (चूंकि .* एक लालची उप-पैटर्न है)
  • ([^.]+) - समूह 1: . के अलावा एक या अधिक वर्ण

एक वैकल्पिक रेगेक्स जैसा दिख सकता है

([^.\\]+)[^\\]*$

एक और रेगेक्स डेमो देखें।

विवरण

  • ([^.\\]+) - समूह 1: . और \ के अलावा एक या अधिक वर्ण
  • [^\\]*$ - 0 या अधिक वर्ण \ के अलावा स्ट्रिंग के अंत तक ($)।

पावरशेल उपयोग:

PS> $s -match '([^.\\]+)[^\\]*$' | Out-Null
PS> $matches[1]
england

यदि आपको एक रेगेक्स की आवश्यकता है जो सीधे आवश्यक स्ट्रिंग लौटाएगा, तो आप इसका उपयोग कर सकते हैं

 $s -replace '.*\\([^\\.]+)[^\\]*$', '$1'

एक .NET रेगेक्स डेमो

  • .* - किसी भी 0+ वर्णों का यथासंभव मिलान करें
  • \\ - एक \ वर्ण
  • ([^\\.]+) - समूह 1 ($1 के साथ संदर्भित): \ और . के अलावा एक या अधिक वर्णों का मिलान और उपभोग करता है
  • [^\\]*$ - \ ([^\\]*) और स्ट्रिंग के अंत ($) के अलावा 0+ वर्ण।
2
Wiktor Stribiżew 4 जुलाई 2018, 13:15

एक स्लैश के लिए पीछे एक नज़र का उपयोग करें और अन्य स्लैश के लिए आगे नकारात्मक नज़र डालें:

(?<=\\)[^\\.]+(?!.*\\)

लाइव डेमो देखें।

ध्यान दें कि कोई समूह नहीं हैं; पूरा मैच आपका लक्ष्य है!

0
Bohemian 4 जुलाई 2018, 12:48