Regex แทนที่ตัวพิมพ์ใหญ่ด้วยอักษรตัวพิมพ์เล็ก


220

ฉันพยายามแทนที่ตัวอักษรตัวพิมพ์ใหญ่ด้วยตัวพิมพ์เล็กที่สอดคล้องกันโดยใช้ regex ดังนั้น

EarTH:   1,
MerCury: 0.2408467,
venuS:   0.61519726,

กลายเป็น

earth:   1,
mercury: 0.2408467,
venus:   0.61519726,

ในข้อความประเสริฐ ฉันจะลดขนาดตัวอักษรในคำที่มีทั้งตัวอักษรพิมพ์เล็กและใหญ่ได้อย่างไร เพื่อที่จะส่งผลกระทบต่อและไม่ได้venUsVENUS

คำตอบ:


393

คุณอาจ:

ค้นหา: (\w) แทนที่ด้วย:\L$1

ctrlหรือเลือกข้อความ K+ L+


7
ซุปเปอร์ มีประโยชน์มาก. คุณกรุณาชี้ไปที่แหล่งข้อมูลที่แสดงรายการการเปลี่ยนแปลงเช่น '\ L' ได้ไหม
Codious-JR

17
ประเสริฐใช้ Boost สำหรับการสนับสนุน RegEx ซึ่งเป็นเอกสารสำหรับสตริงรูปแบบเช่น \ L: boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/
Alex K.

4
และใน IntelliJ
Patrick

11
หมายเหตุ: ในการไปที่ตัวพิมพ์ใหญ่คุณจะต้อง\U
takanuva15

2
หากต้องการใช้ตัวพิมพ์เล็กพารามิเตอร์เดียวให้ใส่ \ E หลังจากสิ้นสุดส่วนตัวพิมพ์เล็ก: $1\L$2\E$3
Michael

129

ฉันคิดว่านี่อาจเป็นประโยชน์สำหรับผู้อื่นเช่นกัน:

หา:

  • ([A-Z])(.*)

แทนที่:

  • \L$1$2-> จะแปลงตัวอักษรทั้งหมดใน$1และ$2เป็นตัวพิมพ์เล็ก
    แต่
  • \l$1$2-> จะแปลงอักษรตัวแรกของ$1เป็นตัวพิมพ์เล็กเท่านั้น

เช่นเดียวกันสำหรับตัวพิมพ์ใหญ่ด้วย\Uและ\u


7
\l$1$2จะทำให้ทั้งหมดเป็น$1ตัวพิมพ์เล็กในกรณีนี้ที่นี่เพราะ$iมีจดหมายเพียงฉบับเดียว \l=> ตัวอักษรตัวแรกต่อไปนี้เป็นตัวพิมพ์เล็กและ\u=> ตัวอักษรตัวแรกต่อไปนี้เพื่อตัวพิมพ์เล็ก ที่ไหน\Uและ\Iทำไปตามตัวอักษรทั้งหมดต่อไปนี้
Raisch

5
โปรดทราบว่า\Eยุติ\Lหรือ\Uลำดับ
Ludovic Kuty

77

ก่อนค้นหาด้วย regex like [A-Z]คุณควรกดปุ่ม case (หรือAlt+ C) case (ตามที่แนะนำโดยละเอียดเพื่อให้แก้ไขในคำตอบที่ยอมรับ) เพื่อความชัดเจนฉันขอยกตัวอย่างอื่น ๆ :

  1. ใช้อักษรตัวพิมพ์ใหญ่คำ
    • ค้นหา: (\s)([a-z])( \sตรงกับบรรทัดใหม่เช่น "venuS" => "VenuS")
    • แทนที่: $1\u$2
  2. ทำให้คำไม่เป็นคำ
    • หา: (\s)([A-Z])
    • แทนที่: $1\l$2
  3. ลบตัวเรือนอูฐ (เช่น cAmelCAse => camelcAse => camelcase)
    • หา: ([a-z])([A-Z])
    • แทนที่: $1\l$2
  4. ตัวอักษรตัวพิมพ์เล็กภายในคำ (เช่น LowerCASe => ตัวพิมพ์เล็ก)
    • หา: (\w)([A-Z]+)
    • แทนที่: $1\L$2
    • ทางเลือกแทนที่: \L$0
  5. ตัวอักษรตัวพิมพ์ใหญ่ภายในคำ (เช่น upperCASe => ตัวพิมพ์ใหญ่ )
    • หา: (\w)([A-Z]+)
    • แทนที่: $1\U$2
  6. ตัวพิมพ์ใหญ่ก่อนหน้า (เช่น upperCase => UPPERCase)
    • หา: (\w+)([A-Z])
    • แทนที่: \U$1$2
  7. ตัวพิมพ์เล็กก่อนหน้า (เช่น LOWERCase => lowerCase)
    • หา: (\w+)([A-Z])
    • แทนที่: \L$1$2
  8. พิมพ์ใหญ่ที่เหลือ (เช่น upperCase => upperCASE)
    • หา: ([A-Z])(\w+)
    • แทนที่: $1\U$2
  9. ตัวพิมพ์เล็กที่เหลือ (เช่น lOWERCASE => lOwercase)
    • หา: ([A-Z])(\w+)
    • แทนที่: $1\L$2
  10. Shift-right-uppercase (เช่น Case => cAse => caSe => casE)
    • หา: ([a-z\s])([A-Z])(\w)
    • แทนที่: $1\l$2\u$3
  11. Shift-left-uppercase (เช่น CasE => CaSe => CAse => ตัวพิมพ์เล็ก)
    • หา: (\w)([A-Z])([a-z\s])
    • แทนที่: \u$1\l$2$3

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

  • ค้นหา: ((?:[a-z][A-Z]+)|(?:[A-Z]+[a-z]))หรือ([a-z][A-Z]+|[A-Z]+[a-z])
  • แทนที่: \L$1

2016-06-23 แก้ไข

ไทเลอร์แนะนำโดยแก้ไขคำตอบนี้เป็นนิพจน์ค้นหาทางเลือกสำหรับ # 4:

  • (\B)([A-Z]+)

อ้างอิงถึงเอกสาร , \Bจะมองหาตัวละครที่ไม่ได้อยู่ที่ขอบเขตของคำ (คือไม่ได้อยู่ที่จุดเริ่มต้นและไม่ได้ในตอนท้ายบริการ) คุณสามารถใช้ปุ่มแทนที่ทั้งหมดและทำสิ่งเดียวกันกับที่คุณมี(\w)([A-Z]+)ในการค้นหานิพจน์

แต่ข้อเสียของ\Bก็คือว่ามันไม่อนุญาตให้เปลี่ยนเดียวอาจจะเนื่องมาจากการค้นหาของ 'ไม่เขตแดน' ข้อ จำกัด (โปรดทำการแก้ไขนี้ถ้าคุณรู้ว่าเหตุผลที่แน่นอน)


2

การแสดงออกปกติ

ค้นหา :\w+

แทนที่ :\L$0

ข้อความประเสริฐใช้เอ็นจิน Perl Compatible Regular Expressions (PCRE) จากไลบรารี Boost เพื่อเพิ่มประสิทธิภาพการแสดงผลปกติในแผงการค้นหา

\L แปลงทุกอย่างเป็นตัวพิมพ์เล็ก

$0 จับภาพกลุ่ม


โปรดทำให้นี่เป็นคำตอบที่สมบูรณ์ไม่ใช่แค่คำตอบโค้ดโดยไม่มีคำอธิบาย
petezurich

1

ใน BBEdit ใช้งานได้ (เช่นการเปลี่ยนค่า ID เป็นตัวพิมพ์เล็ก):

ค้นหาค่าใด ๆ : <a id="(?P<x>.*?)"></a> แทนที่ด้วยตัวพิมพ์เล็ก:<a id="\L\P<x>\E"></a>

เป็น: <a id="VALUE"></a> กลายเป็น:<a id="value"></a>


0

ลองสิ่งนี้

  • หา: ([A-Z])([A-Z]+)\b
  • แทนที่: $1\L$2

ตรวจสอบให้แน่ใจว่าตัวพิมพ์เล็กและใหญ่เปิดอยู่ (Alt + C)


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