คำถามติดแท็ก regex

หรือที่เรียกว่านิพจน์ปกติหรือ regexp คำอธิบายของชุดสตริงมักใช้สำหรับค้นหาและตรวจสอบสตริง

1
กรณีเฉพาะของ grep ที่ไม่โลภ
ฉันรู้ว่ามีตัวอย่างมากมายของ regex ที่ไม่โลภด้วย grep แต่ฉันมีปัญหากับกรณีเฉพาะของฉัน ไฟล์ของฉันมีเส้นคล้ายกับ: [X12345.Yabc.Z7989].[ALPHA/BRAVO].[CHARLIE.DELTA] และฉันพยายามที่จะแยกออกเพียง X12345 ส่วนหนึ่ง นั่นคือส่วนที่เริ่มต้นด้วย X และจนถึงช่วงแรก ( . ) ตัวอย่างที่ใกล้เคียงที่สุดของฉันคือ: grep -Eo "X(.*?)\." inputfile แต่นั่นก็โลภเกินไป (แม้ว่าฉันคิดว่าฉันใช้ .*? อย่างถูกต้อง ใครช่วยแนะนำฉันไปยัง regex ที่เหมาะสม?
1 regex  grep 

1
ฉันทำอะไรผิดกับ grep
ดังต่อไปนี้สมเหตุสมผล (แม้ว่าคุณจะไม่เห็นเนื้อหาของ debug.cpp) $ grep '^[A-Za-z_]' debug.cpp float CheckExistence(); entity Findgoal(float gno); void RPrint(const string& msg); void MakeMeDebug(entity who); void dremove(entity te) void display_location() void RPrint(const string& msg) void MakeMeDebug(entity who) ตอนนี้เมื่อฉันเพิ่ม .*ดังนี้ $ grep '^[A-Za-z_].*' debug.cpp ฉันได้รับ 8 บรรทัดว่างเปล่าเป็นผลลัพธ์ (ซึ่งฉันไม่สามารถทำให้เว็บไซต์นี้แสดงผลได้) ฉันสงสัยว่าเป็นข้อผิดพลาดอย่างยิ่งฉันได้อัปเดต grep ล่าสุด (เวอร์ชั่น 2.25) แล้วและก็ทำสิ่งเดียวกัน ฉันใช้ Ubuntu หากความเข้าใจของฉันถูกต้องนิพจน์ปกติของฉันจะพูดว่า: …
1 ubuntu  regex  grep 

1
มีนิพจน์ปกติเพื่อค้นหาอักขระตามลำดับหรือไม่
ฉันค้นหาสูงและต่ำและดูเหมือนจะไม่พบอะไรเลยดังนั้นในที่สุดก็ตัดสินใจขอความช่วยเหลือจากที่นี่ด้วยความหวังว่าทุกคนที่นี่สามารถให้คำแนะนำฉัน งานปัจจุบันของฉันคือค้นหารายการสตริงสำหรับสตริงที่มีอักขระตามลำดับ ฉันกำลังพยายามหาวิธีที่มีประสิทธิภาพและคิดว่านิพจน์ทั่วไปอาจดึงออกมาได้หรือไม่ ตัวอย่างเช่นฉันมีข้อมูลต่อไปนี้: asdf1234qwer asdfsdfgqwer abcdefgh zyxwv 123456789 hello world ในที่สุดฉันต้องการเพียง "abcdefgh", "zyxwv" และ "123456789" เพราะสตริงทั้งหมดมีอักขระตามลำดับ สตริงแรกที่ฉันไม่ต้องการเนื่องจากมีเพียงบางส่วนเท่านั้นที่อยู่ในลำดับ (1234) ไม่ใช่สตริงทั้งหมด ฉันไม่พบสิ่งใดสำหรับนิพจน์ทั่วไปที่ดูเหมือนว่าเป็นไปได้?
1 regex  string 

2
Regex F&R ขั้นสูง - แผ่น / Excel - ถ้า“ X” อยู่ในเซลล์ A1 และเพิ่ม“ Y” ลงในเซลล์ B1
ฉันกำลังมองหาสูตรหรือ regex ที่ฉันสามารถใช้เพื่อค้นหาค่าในสตริงในหนึ่งเซลล์และหากพบเพิ่มสตริงอื่นไปยังเซลล์ที่อยู่ติดกันในคอลัมน์อื่น ตัวอย่างเช่นฉันมีรายการค่าใช้จ่ายที่ระบุไว้ในCol Aโดยผู้ขาย: Nandos Uber McDonalds PureGym ฉันต้องการจัดหมวดหมู่เหล่านี้ในCol B : [ Find "Nandos|McD " in ColA and write "Food" in the equivalent cell in ColB ] [ Find "Uber" in ColA and write "Travel" in the equivalent cell in ColB ] [ Find "PureGym" in ColA and write …

2
คำสั่ง rm และการแสดงออกปกติผ่านเปลือก Linux BASH
ฉันพยายามใช้นิพจน์ทั่วไปเพื่อลบชุดของไฟล์ออก แต่เชลล์ bash จะส่งคืนข้อความ rm: cannot remove `[0-99]+ -': No such file or directory rm: cannot remove `[a-zA-Z': No such file or directory rm: cannot remove `]+.[a-z]+': No such file or directory คำสั่งคือ [0-99]+\ - [a-zA-Z ]+\.[a-z]+ คำถาม ฉันสามารถใช้นิพจน์ทั่วไปได้หรือไม่ ถ้าใช่ฉันจะใช้พวกเขาที่มีคำสั่งเช่นrm, mkdirฯลฯ
1 linux  regex 

1
การแก้ไขชื่อไฟล์ในสไตล์ของตัวแก้ไขข้อความในไดเรกทอรี
ฉันจะแก้ไขชื่อของไฟล์ในไดเรกทอรีราวกับว่าฉันแก้ไขข้อความของไฟล์โดยใช้โปรแกรมแก้ไขข้อความได้อย่างไร? ฉันรู้สึกว่าฉันเห็นสิ่งนี้สาธิตในวิดีโอบางทีอาจใช้ปลั๊กอิน Vim หรืออย่างอื่น - หรืออาจเป็นข้อความ Sublime? ฉันต้องการที่จะสามารถทำการแทนที่สตริง regex ทำการแก้ไขโดยพลการ ฯลฯ โดยไม่ต้องเขียนเชลล์สคริปต์หรือร่างคำสั่ง arcane shell

1
sed + ไม่ทำงานบน solaris
ฉันพยายามใช้sedสายกับ+เครื่อง Solaris และบนเครื่อง Linux บน Solaris sed ไม่ได้ลบสตริงจนกว่าจำนวนแรกเช่นฉันต้องการ: solaris:/ ROOT > echo "Release............5.3.7.1-12" | sed 's/[^0-9]\+//' Release............5.3.7.1-12 บน Linux ฉันได้รับผลลัพธ์ที่คาดหวัง: linux tmp]# echo "Linux Release............5.3.7.1-12" | sed 's/[^0-9]\+//' 5.3.7.1-12 ทำไมรูปแบบ sed นี้ไม่ทำงานบนโซลาริส? ฉันต้องเปลี่ยนแปลงอะไรบ้างในไวยากรณ์เพื่อให้สามารถทำงานบน Solaris ได้
1 regex  sed  solaris 

2
วิธีการลบบรรทัดที่ตรงกับรูปแบบเฉพาะด้วย Notepad ++
ฉันต้องออกจากบรรทัดที่มีทั้งชื่อผู้ใช้และรหัสผ่านเช่นนี้: username:password ฉันต้องลบบรรทัดที่ไม่มีชื่อผู้ใช้ที่เกี่ยวข้องเช่นนี้: :password ไฟล์ตัวอย่างแบบเต็มประกอบด้วย: username:password :password0 username:password1 username:password2 :password username:password4 :password2 username2:password5 ผลที่ต้องการ: username:password username:password1 username:password2 username:password4 username2:password5

2
กรองอินพุตด้วย sed (regex)
ฉันมีปัญหากับ sed ไม่ได้คืนสิ่งที่ฉันคาดหวังเมื่อใช้รูปแบบ regex เพื่อล้างผลลัพธ์บางอย่างจากแบบสอบถาม mysql mysql -uroot -p -e 'SELECT `path` FROM db.media_gallery' | sed -n -r 's/[^\/]+([^\s]+).*/\1/p' แบบสอบถามส่งคืนกลุ่มของแถวเช่น: | /media/M/W/lmt_MWS04_8.png | | /media/M/W/lmt_MWS02_11.png | เมื่อฉันไพพ์ผ่านคำสั่ง sed ที่ระบุไว้ด้านบนมันจะส่งคืนสิ่งนี้: //M/W/lmt_MWS04_8.png //M/W/lmt_MWS02_11.png "สื่อ" ไปไหน เหตุใดจึงลบส่วนของสตริงของฉันแบบสุ่ม ไม่มีใครรู้วิธีแก้ไข regex ของฉันหรือไม่
1 linux  bash  regex  sed 

1
เป็นกลุ่ม regex: + จะต้องมีการหลบหนี, * ไม่ได้ ทำไม?
สมมติว่าคุณต้องการเลือกบรรทัดที่เป็น: ช่องว่างเผื่อเลือกตามด้วยจำนวนเต็มบวกตามด้วยช่องว่างเพิ่มเติม นี่คือ regex ที่ใช้งานได้: :g/^\s*\d\+\s*/ *ผู้ประกอบการไม่ได้หนีออกมาในขณะที่+เป็น การหลบหลีก*แบ่ง Regex ดังนั้นจึงไม่หนี+หาย มีคำอธิบายที่ดีสำหรับเรื่องนี้หรือไม่? เป็นการดีที่จะทำให้กฎใช้งานง่าย ด้วยเสียงฉันมักจะพยายามเขียน regexes เพราะกฎการหลบหนีที่ผิดปกติดังนั้นฉันรักความเข้าใจที่จะทำให้ทุกอย่างคลิกสำหรับฉัน
1 vim  regex 

4
Regex กำลังจับคู่ชุดค่าผสมทั้งหมด
ฉันมีข้อความต่อไปนี้ด้านล่าง ฉันจะเขียน regex เพื่อจับข้อความทั้งหมดที่เกี่ยวข้องได้REQ_XXXอย่างไร นี่คือการแสดงออกของฉันแต่มันจับ.*(REQ_.*)\| |3 |4 |5ฉันแค่อยากให้มันหยุดหลังจากครั้งแรกที่|มันเห็น
1 regex 

1
ลบคอลัมน์สุดท้ายออกจากไฟล์ที่คั่นด้วยเครื่องหมายจุลภาค
ฉันจะลบคอลัมน์สุดท้ายออกจากไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคใน notepad ++ โดยใช้ regex พร้อมแทนที่และค้นหาได้อย่างไร นี่คือไฟล์ของฉัน: 2010-09-02,148.67,31.34,0,0,31.34 2010-09-03,149.52,31.24,0,0,31.24 ... ฉันพยายามที่จะหารูปแบบนี้ในตอนท้ายของแต่ละบรรทัดโดยทั่วไปคอลัมน์สุดท้ายหรือทุกอย่างหลังจากเครื่องหมายจุลภาคล่าสุดตัวอย่างเช่น: ,31.34 ,31.34 นี่คือสิ่งที่ฉันมีจนถึงตอนนี้ แต่ดูเหมือนจะเลือกทั้งบรรทัด: .*,\d+.\d+ ฉันแค่ต้องการเลือก,31.34และลบมันนั่นคือแทนที่ด้วยไม่มีอะไร
1 notepad++  regex  csv 

3
แยกและลบส่วนของสตริงระหว่างตัวคั่น
ฉันต้องการผ่านไฟล์และลบลำดับบางอย่างระหว่างตัวคั่น ตัวอย่างเช่น drw---- 00000000 11111111 0 ./a/ drw---- 00000000 11111111 0 ./b/ d------ 00000000 11111111 0 ./c/ d------ 00000000 11111111 0 ./d/k/ d------ 00000000 11111111 0 ./e/l/r/ d------ 00000000 11111111 0 ./f/m/s/x/ ------- 00000000 11111111 89 ./g/n/t/y/C.xml dr----- 00000000 11111111 0 ./h/o/u/z/ dr-r--- 00000000 11111111 0 ./i/p/v/A/D/ d--r--- 00000000 11111111 …
1 shell  cygwin  regex  sed 

1
Powershell 2 แช่แข็งบน Select-String“. * _. * = - 1”
สิ่งนี้อาจดูเหมือนโง่ Q แต่ฉันมีปัญหา PS: เช่นชื่อกล่าวว่าฉันลองบางสิ่งเช่น: $all = gci D:\work\ $all | Select-String ".*_.*=-1" (ฉันกำลังมองหาตัวเลือกการกำหนดค่าที่มีค่า -1 และ _ ในชื่อ) ปัญหาคือ PS หยุดทำงานหรือไม่ทำงานในเวลาที่เหมาะสม ctrl + c ไม่ทำงาน Ofc คุณสามารถพูดได้ว่าข้อมูลเป็นสิ่งที่มากสำหรับการประมวลผล แต่ปัญหาคือ grep ใช้เวลาประมาณ 1-2 วินาทีในโฟลเดอร์เดียวกันและ regex เดียวกัน คำสั่ง Grep คือ (แต่เดิมมันไม่มี -r แต่ฉันเพิ่มเข้าไปหลังจากคอมเม้นท์บางอย่าง grep ยังเร็ว แต่ใช้เวลา 20-30 วินาที) grep ".*_.*=-1" -r D:\work\* แก้ไข: …

1
วิธีบุ๊กมาร์กเฉพาะครั้งแรกของผลลัพธ์การค้นหาหลายรายการเท่านั้น
ฉันค่อนข้างใหม่สำหรับ regex และฉันขอขอบคุณแนวทางบางอย่าง ฉันมีไฟล์ข้อความค่อนข้างใหญ่และฉันต้องการคั่นบรรทัดคำหลักของฉัน แต่มีเพียงอินสแตนซ์แรกของพวกเขา ตัวอย่างเช่น: แอปเปิ้ลอร่อย ฉันชอบเต่า. เขาสูง. เธอสวย. ตกนรก! เต่าฉลาด นี่คืออาคารที่สวยที่สุดในโลก แอปเปิ้ลดีต่อสุขภาพของคุณ ธงฮังการีเป็นธงสามสีในแนวนอนมีสีแดงสีขาวและสีเขียว เต่าเป็นสัตว์เลื้อยคลาน คุณฉลาดมาก. ภาษาฮังการีเป็นภาษาที่ยาก กล้วยและแอปเปิ้ลมักจะราคาถูก หากฉันสร้าง regex (apple | turtle | Hungarian) ฉันจะได้รับ 8 คั่นหน้าบรรทัด แต่ในตัวอย่างที่กล่าวถึงข้างต้นฉันต้องการเพียงครั้งแรกที่เกิดขึ้นดังนั้นฉันต้องการคั่นเฉพาะประโยคต่อไปนี้: แอปเปิ้ลอร่อย ฉันชอบเต่า. ธงฮังการีเป็นธงสามสีในแนวนอนมีสีแดงสีขาวและสีเขียว มีวิธีทำเช่นนี้หรือไม่? ขอบคุณล่วงหน้า.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.