إرجاع الكلمة الأولى من قوس مربع باستخدام regex

لدي ملف يحتوي على

[[ abstraction, verb.cognition:abstract,+ ]] 

أرغب في إزالة قوس مربع وتريد الاحتفاظ بكلمة abstraction من هذه الشريحة. لذلك يجب أن يكون الإخراج -

abstraction

لقد حاولت -

import re

with open('test.txt','r') as f:
    for line in f:
        rx = re.compile(r'\[[^][]*]')  string
        while rx.search(line):
            line = rx.sub('',line)                     
            s = line.strip()
            print(s)

مما يدل على [] فقط قوس مربع.هل هناك طريقة للقيام بذلك؟ ارجو المساعدة

0
إذا لم يتغير التنسيق ، فستقوم عملية تنسيق السلسلة البسيطة: s.split ('،') [0] .lstrip ('[') .
وأضاف المؤلف Keyur Potdar, مصدر

3 إجابة

using re.search

على مثال: </قوي>

s = "[[ abstraction, verb.cognition:abstract,+ ]]"
m = re.search("\[\[(.*?)\,.*", s)
if m:
    print(m.group(1))

<�القوي> إخراج: </قوي>

 abstraction
0
وأضاف
jahan. وهذا يعني مطلبًا مختلفًا تمامًا وتعبيرًا مختلفًا.
وأضاف المؤلف Rakesh, مصدر
يعمل ولكن في ملفي ، هناك المزيد من الخطوط مثل الكيان و [[abstraction و verb.cognition: abstract و +]] و physical_intity . وأريد أيضًا طباعة هذه الخطوط تجريد الكيان physical_intity . لقد جربت شفرتك ، وهي تعرض abstraction وهي صحيحة. ولكن عندما أريد طباعة خطوط أخرى كيف يمكنني القيام بذلك؟
وأضاف المؤلف jan, مصدر

لا داعي للقلق حول الأقواس ، إذا كان ملفك يحتوي فقط على ذلك ، فأنت تحتاج فقط إلى مطابقة الكلمة الأولى.

import re
t = "[[ abstraction, verb.cognition:abstract,+ ]] "

match = re.search(r"\b([^,]+)\b", t)
# prints False when no match is found
print(match is not None and match.group(0))
# abstraction
0
وأضاف

يمكنك تجربة هذا أيضًا ،

line="""[[ abstraction, verb.cognition:abstract,+ ]] rewq [[ abs, verb.cognition:abstract,+ ]] fdsaf [[ abstraction, verb.cfdsa,+ ]] """
rx = re.compile(r'\[\[[^][]*]]')
line = rx.sub(lambda m: '' if m.group(0).find("abstraction")== -1 else "abstraction", line)                     
s = line.strip()
print(s)

الانتاج هو

abstraction rewq  fdsaf abstraction
0
وأضاف