แปลงถ่านเป็นตัวพิมพ์ใหญ่โดยใช้นิพจน์ทั่วไป (EditPad Pro)


159

ฉันเขียนนิพจน์ปกติด้วยความหวังว่าฉันจะสามารถแทนที่ทุกการแข่งขัน (นั่นเป็นเพียงตัวอักษรตัวหนึ่ง) เป็นตัวพิมพ์ใหญ่ ฉันใช้ EditPad Pro (แต่ฉันยินดีที่จะใช้เครื่องมืออื่น ๆ ที่จะอนุญาตให้ฉันทำเช่นนี้ตราบใดที่มีอิสระที่จะลองเพราะฉันต้องทำสิ่งนี้เพียงครั้งเดียวเท่านั้น)

พื้นหลัง:ฉันมีไฟล์ข้อความที่ยาวมากซึ่งใช้โดยแอปพลิเคชันที่มีตัวอักษรตัวพิมพ์เล็กและคำบางคำเริ่มต้นด้วยตัวพิมพ์เล็กแทนที่จะเป็นตัวพิมพ์ใหญ่ดังนั้นจึงทำให้แอปพลิเคชันหยุดทำงาน สิ่งนี้จะใช้เวลานานในการทำด้วยมือและมันค่อนข้างซับซ้อนที่จะทำโดยไม่มีการแสดงออกอย่างสม่ำเสมอเพราะการเกิดตัวพิมพ์เล็ก (ชั่ว) ตัวพิมพ์เล็กนั้นเฉพาะเจาะจงมาก

ฉันได้เขียนนิพจน์ปกติที่เลือกและตอนนี้ฉันสามารถใช้กับ backreference ($ 1 ใช้ได้ดี) แต่ฉันไม่สามารถแทนที่ด้วยอักขระตัวพิมพ์ใหญ่ ฉันคิดว่า \ u $ 1 จะใช้งานได้ แต่มันไม่ได้อยู่ใน EditPad Pro

หากไม่มีเครื่องมือฟรีช่วยให้ฉันทำเช่นนี้ฉันเดาว่าทางเลือกอื่นจะทำใน C # แต่ฉันก็รีบหน่อยและไม่ได้อยู่ใกล้คอมไพเลอร์ดังนั้นฉันต้องดาวน์โหลดรุ่นด่วนก่อนดังนั้น ... มันจะดีกว่าถ้าหาเครื่องมือที่รองรับคุณสมบัติเช่นนี้!

ขอบคุณ!


3
คำถามนี้เหมาะกับ Superuser มากกว่าหรือไม่
georgiecasey

คำตอบ:


273

TextPad จะช่วยให้คุณสามารถดำเนินการนี้ได้

ตัวอย่าง:

test this sentence

ค้นหาอะไร: \([^ ]*\) \(.*\) แทนที่ด้วย:\U\1\E \2

\Uจะทำให้ตัวอักษรต่อไปนี้ทั้งหมดจะเป็นบน

\Eจะปิด\U

ผลลัพธ์จะเป็น:

TEST this sentence

13
มีวิธีการดำเนินการนี้ใน. NET Regex (ไม่ใช้ToUpper)?
Shimmy Weitzhandler

34
ทำงานได้ใน notepad ++ เช่นกัน
Shawn

33
\U$1\EในSublime Text
Qwerty

10
\U\1\EในVim
J. Katzwinkel

6
ทำงานใน PHPStorm เช่นกัน ฉันมีข้อกำหนดตรงข้ามแม้ว่า ฉันต้องแทนที่ค่าแอตทริบิวต์ตัวพิมพ์ใหญ่ทั้งหมด (จากอาจเป็น '90s HTML) เป็นตัวพิมพ์เล็ก ใช้\L$1\Eงานได้
Ejaz

30

ฉันรู้ว่าหัวข้อนี้เป็นเรื่องเกี่ยวกับ EditPad Pro แต่ฉันมาที่นี่เพราะฉันมีความต้องการเดียวกันกับ javascript regexp

สำหรับคนที่อยู่ที่นี่ต้องการคำแนะนำเดียวกันคุณสามารถใช้ฟังก์ชั่นหรือแลมบ์ดาเป็นอาร์กิวเมนต์แทนที่

ฉันใช้ฟังก์ชั่นด้านล่างเพื่อแปลงชื่อ CSS ด้วย-เพื่อเทียบเท่าจาวาสคริปต์ตัวอย่างเช่น"border-top"จะถูกเปลี่ยนเป็น"borderTop":

    s = s.replace(/\-[a-z]/g, x => x[1].toUpperCase());

26

EditPad Pro และ PowerGREP มีคุณสมบัติพิเศษที่ช่วยให้คุณสามารถเปลี่ยนเคสของ backreference \U1แทรก backreference แรกเป็นตัวพิมพ์ใหญ่ตัวพิมพ์\L1เล็กและ \F1อักขระตัวแรกในตัวพิมพ์ใหญ่และส่วนที่เหลือเป็นตัวพิมพ์เล็ก สุดท้าย\I1แทรกด้วยตัวอักษรตัวแรกของแต่ละคำที่เป็นตัวพิมพ์ใหญ่และตัวอักษรอื่นเป็นตัวพิมพ์เล็ก

ที่มา: Goyvaerts, Jan (2006) นิพจน์ปกติ: The Complete กวดวิชา Lulu.com พี 35 . ISBN 1411677609 Google หนังสือ สืบค้นเมื่อวันที่ 25 มิถุนายน 2010


6

คุณสามารถทำได้ใน jEdit โดยใช้ตัวเลือก "Return value ของตัวอย่าง BeanShell" ในกล่องโต้ตอบค้นหาและแทนที่ของ jEdit เพียงค้นหา" [a-z]"และแทนที่ด้วย" _0.toUpperCase()"(โดยไม่มีเครื่องหมายอัญประกาศ)


1
การตอบสนองของคุณไม่เกี่ยวข้องกับคำถามเริ่มแรก แต่ฉันพบในขณะที่ googling และเป็นสิ่งที่ฉันกำลังมองหา เยี่ยมมากขอบคุณ!
adietisheim

5

นอกจากนี้คุณยังสามารถใช้ตัวอักษรตัวแรกของการแข่งขันโดยใช้\I1และ\I2อื่น ๆ แทนและ$1$2


1

เป็นอีกตัวอย่างหนึ่งของการใช้งาน Notepad ++ (โหมดค้นหานิพจน์ปกติ)

Find: (g|c|u|d)(et|reate|pdate|elete)_(.)([^\s (]+)
Replace: \U\1\E$2\U\3\E$4

ตัวอย่าง:

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