ถูกสงสัยว่าวิธีที่ดีที่สุดคือการแข่งขัน"test.this"
จาก"blah blah blah test.this@gmail.com blah blah"
นั้นคืออะไร? ใช้ Python
ฉันได้ลองแล้ว re.split(r"\b\w.\w@")
ถูกสงสัยว่าวิธีที่ดีที่สุดคือการแข่งขัน"test.this"
จาก"blah blah blah test.this@gmail.com blah blah"
นั้นคืออะไร? ใช้ Python
ฉันได้ลองแล้ว re.split(r"\b\w.\w@")
คำตอบ:
A .
ใน regex เป็นอักขระเมตาซึ่งใช้เพื่อจับคู่อักขระใด ๆ ในการจับคู่จุดตามตัวอักษรคุณต้องหลีกเลี่ยงจุดนั้น\.
ใน regex ของคุณคุณต้องหลีกเลี่ยงจุด"\."
หรือใช้ในคลาสอักขระ "[.]"
เนื่องจากเป็นอักขระเมตาใน regex ซึ่งตรงกับอักขระใด ๆ
นอกจากนี้คุณต้อง\w+
แทนที่จะ\w
จับคู่อักขระคำหนึ่งตัวขึ้นไป
ตอนนี้ถ้าคุณต้องการtest.this
เนื้อหาsplit
นั่นไม่ใช่สิ่งที่คุณต้องการ split
จะแยกสตริงของคุณรอบ ๆ ไฟล์test.this
. ตัวอย่างเช่น:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
คุณสามารถใช้re.findall
:
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
"ในโหมดเริ่มต้น Dot (.) จะจับคู่อักขระใด ๆ ยกเว้นการขึ้นบรรทัดใหม่หากระบุแฟล็ก DOTALL ค่านี้จะจับคู่อักขระใด ๆ รวมถึงขึ้นบรรทัดใหม่ด้วย" (python Doc)
ดังนั้นหากคุณต้องการประเมิน dot literaly ฉันคิดว่าคุณควรใส่ไว้ในวงเล็บเหลี่ยม:
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
ในการหลีกเลี่ยงอักขระที่ไม่ใช่ตัวเลขและตัวอักษรของตัวแปรสตริงรวมถึงจุดคุณสามารถใช้re.escape
:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
เอาต์พุต:
whatever\.v1\.dfc
คุณสามารถใช้นิพจน์ที่ใช้ Escape เพื่อค้นหา / จับคู่สตริงตามตัวอักษร
ในจาวาสคริปต์คุณต้องใช้ \. เพื่อให้ตรงกับจุด
ตัวอย่าง
"blah.tests.zibri.org".match('test\\..*')
null
และ
"blah.test.zibri.org".match('test\\..*')
["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]
สำนวนนี้
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
อาจทำงานได้ดีสำหรับสตริงอินพุตประเภทเฉพาะเหล่านั้น
import re
expression = r'(?<=^|\s)[^.\s]+\.[^.\s]+(?=@)'
string = '''
blah blah blah test.this@gmail.com blah blah
blah blah blah test.this @gmail.com blah blah
blah blah blah test.this.this@gmail.com blah blah
'''
matches = re.findall(expression, string)
print(matches)
['test.this']
หากคุณต้องการที่จะลดความซับซ้อน / การแก้ไข / การสำรวจการแสดงออกก็ถูกอธิบายอยู่ด้านบนขวาของแผงregex101.com หากคุณต้องการคุณสามารถดูในลิงค์นี้ว่าจะจับคู่กับอินพุตตัวอย่างบางส่วนอย่างไร
\w
จับคู่เฉพาะอักขระตัวเดียว - คุณอาจต้องการ\w+