Notepad ++: Cách nhóm Correclty để thay thế hoạt động


0

Tôi đã được thay thế "\ n \ 1 = \ 2". Công việc của tôi là tạo ra một mô hình tìm kiếm để thay thế thành công.

Dữ liệu của tôi như thế này:

There are Spanish translations for some names like Mary (Maria), John (Juan), Michael (Miguel) and Joseph (Jose). 

Mục tiêu của tôi là làm cho nó trông như thế này:

There are Spanish translations for some names like 
Mary = Maria
John = Juan
Michael = Miguel
Joseph = Jose.

Tìm kiếm tôi có cho đến nay là "are. |,. | \ Và. + (^ [Az] \ S) + (. * \ S)". Ngay cả khi phần đầu tiên của tìm kiếm hoạt động, nó không được nhóm chính xác khi thay thế đến. Tôi không biết phải thay đổi gì từ tìm kiếm hoặc cách thay đổi để làm cho nó hoạt động.

Câu trả lời:


2
  • Ctrl+H
  • Tìm cái gì: (\w+)\h+\((\w+)\)\h*(?:,|and)?\h*(\.)?
  • Thay bằng: \n$1 = $2$3
  • kiểm tra Bọc xung quanh
  • kiểm tra biểu thức chính quy
  • Replace all

Giải trình:

(\w+)       # group 1, 1 or more word characters, English name
\h+         # 1 or more horizontal spaces
\(          # openning parenthesis
(\w+)       # group 2, 1 or more word characters, the Spanish name
\)          # closing parenthesis
\h*         # 0 or more horizontal spaces
(?:         # non capture group
    ,       # a comma
  |         # OR
    and     # literally and
)?          # end group, optional
\h*         # 0 or mor horizontal spaces
(\.)?       # group 3, a dot, optional

Thay thế:

\n          # linefeed, you can use \r\n for windows linebreak
$1          # content of group 1
 =          # space, equal sign, space
$2          # content of group 2
$3          # content of group 3

Kết quả cho ví dụ đã cho:

There are Spanish translations for some names like 
Mary = Maria
John = Juan
Michael = Miguel
Joseph = Jose. 

Chụp màn hình:

nhập mô tả hình ảnh ở đây


0

Tôi không đặc biệt quen thuộc với khả năng tìm kiếm và thay thế của Notepad ++, nhưng Unix sedkhá giống nhau.

Tôi tin rằng không có cách nào bạn có thể nhận được chính xác kết quả mà bạn muốn với chính xác chuỗi thay thế bạn thấy, bởi vì bạn muốn không gian trước khi những cái tên Tây Ban Nha (  Maria,  Juan, vv), nhưng không có dấu cách như hiện diện trong văn bản đầu vào. Bạn sẽ cần thêm ít nhất một khoảng trắng vào chuỗi thay thế.

Các -rtùy chọn kể sedđể sử dụng “biểu thức thông thường mở rộng”. Chúng tôi hoàn toàn không cần lựa chọn đó, nhưng

  • sed(theo mặc định) sử dụng ()để khớp với dấu ngoặc đơn và \(…\)để bắt một nhóm, trong khi
  • sed -rsử dụng \(\)để khớp với dấu ngoặc đơn và (…)bắt một nhóm.

Bạn dường như đang mong đợi có thể sử dụng (…)để chụp một nhóm, vì vậy tôi sẽ làm điều này với -r.

Bạn có thể làm điều này là một thay thế duy nhất trong sedvới

sed -r 's/\s([A-Za-z]*)\s\(([A-Za-z]*)\)(,| and)*/\n\1 = \2/g'

Điều đó có thể được chia thành

sed -r 's/   \s   ([A-Za-z]*)   \s   \(   ([A-Za-z]*)   \)   (,| and)?   /   \n\1 = \2   /g'
  • s/ - bắt đầu một lệnh thay thế.
  • \s- một không gian. Trong sed, bạn có thể sử dụng các ký tự không gian thực tế; Tôi nghi ngờ điều đó cũng đúng với Notepad ++. Trong  sedbạn cũng có thể sử dụng [[:space:]]. Tất nhiên một không gian phù hợp chỉ là một không gian, nhưng  \s[[:space:]]không gian phù hợp hoặc tab.
  • ([A-Za-z]*)- một nhóm bắt giữ của bất kỳ số lượng chữ cái (chữ hoa hoặc chữ thường), để phù hợp với phiên bản tiếng Anh của tên. Trong  sedbạn cũng có thể sử dụng [[:alpha:]][[:upper:]]hoặc  [[:lower:]], như mong muốn).
  • \s - một không gian khác.
  • \( - dấu ngoặc đơn bên trái (chữ cái trước phiên bản tiếng Tây Ban Nha của tên).
  • ([A-Za-z]*) - giống như trên - một nhóm bắt giữ bất kỳ số lượng chữ cái nào (chữ hoa hoặc chữ thường), để khớp với phiên bản tên tiếng Tây Ban Nha.
  • \) - một dấu ngoặc đơn bên phải theo nghĩa đen (cái sau phiên bản tiếng Tây Ban Nha của tên).
  • (,| and)?- một nhóm phù hợp , hoặc  and , không hoặc một lần. Điều này khớp với nội dung nằm giữa dấu ngoặc đơn bên phải sau tên phiên bản tiếng Tây Ban Nha và tên phiên bản tiếng Anh tiếp theo. Chúng tôi cần có khả năng xử lý số lần xuất hiện của nhóm này vì chúng tôi cần khớp Joseph (Jose), mặc dù sau đó không có dấu phẩy hoặc Thời gian and.
    Lưu ý rằng chúng ta có thể sử dụng \sandthay vì  and; Tôi tin rằng  andnó dễ đọc hơn nhiều. Cũng lưu ý rằng chúng ta có thể sử dụng  *(không hoặc nhiều hơn, không giới hạn) thay vì ?.
  • /- kết thúc chuỗi tìm kiếm; bắt đầu chuỗi thay thế.
  • \n\1 = \2- chuỗi thay thế của bạn (dòng mới, nhóm chụp đầu tiên  = và nhóm chụp thứ hai). Như đã đề cập trước đó, tôi đã thêm khoảng trắng trước và sau =.
  • /g- kết thúc lệnh. Chữ gviết tắt của từ toàn cầu, và chỉ định rằng việc thay thế phải được thực hiện nhiều lần nhất có thể (mặc định là một lần trên mỗi dòng).

Vì vậy, lệnh Notepad ++ có lẽ rất giống nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.