Regex: Xóa mỗi hai hoặc nhiều khoảng trắng giữa các thẻ cụ thể và chỉ để lại một khoảng trắng


1

Tôi muốn xóa hai hoặc nhiều khoảng trắng giữa các thẻ cụ thể và chỉ để lại một khoảng trắng:

Ví dụ:

<p class="text_obisnuit"> The context of articles, stories, and conversations helps you figure out and understand the meaning of English words in the text that are new to you. </p>

Đầu ra mong muốn của tôi:

<p class="text_obisnuit">The context of articles, stories, and conversations helps you figure out and understand the meaning of English words in the text that are new to you.</p>

Tôi đã thử một cái gì đó nhưng nó không hoạt động

(?<=<p class="text_obisnuit">)\s*|\s*(?=</p>)

Câu trả lời:


1

Điều này loại bỏ 2 hoặc nhiều không gian duy nhất bên trong <p class="text_obisnuit"></p>và giữ bất kỳ nhiều không gian khác.

  • Ctrl+H
  • Tìm cái gì: (?:<p class="text_obisnuit">|\G)(?:(?!</p>).)*?\s\K\s+
  • Thay bằng: LEAVE EMPTY
  • kiểm tra Bọc xung quanh
  • kiểm tra biểu thức chính quy
  • KHÔNG KIỂM TRA. matches newline tùy thuộc vào việc bạn có muốn khớp nhiều dòng hay không.
  • Replace all

Giải trình:

(?:                         # start non capture group
  <p class="text_obisnuit"> # literally
 |                          # OR
  \G                        # restart from position of last match
)                           # end group
(?:                         # start non capture group
  (?!</p>)                  # negative lookahead, make sure we haven't reach </p>
  .                         # any character
)*?                         # group may appear 0 or more times, not greedy
\s                          # a space
\K                          # forget all we have seen until this position
\s+                         # 1 or more spaces

Văn bản đã cho:

other     text

<p class="text_obisnuit">  The context of articles,   stories, and conversations helps you     figure out and understand the meaning   of English words in the text that are new to you.   </p>

other    text

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

other     text

<p class="text_obisnuit"> The context of articles, stories, and conversations helps you figure out and understand the meaning of English words in the text that are new to you. </p>

other    text

Lưu ý: nó giữ không gian ngay sau <p...>và ngay trước</p>


Nếu bạn muốn xóa các khoảng trắng này, bạn phải chạy regex khác:

  • Ctrl+H
  • Tìm cái gì: (?<=<p class="text_obisnuit">)\s+|\s+(?=</p>)
  • Thay bằng: LEAVE EMPTY
  • Bỏ chọn trường hợp khớp
  • kiểm tra Bọc xung quanh
  • kiểm tra biểu thức chính quy
  • Replace all

Giải trình:

(?<=                        # start positive lookbehind, make sure we have 
  <p class="text_obisnuit"> # literally
)                           # end lookbehind
\s+                         # 1 or more spaces
|                           # OR
\s+                         # 1 or more spaces
(?=                         # start positive lookahead
  </p>                      # literally
)                           # end lookahead

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

other     text

<p class="text_obisnuit">The context of articles, stories, and conversations helps you figure out and understand the meaning of English words in the text that are new to you.</p>

other    text

1
xin chào, Toto. Đó là vấn đề của tôi, tôi cũng cần xóa khoảng trống trước và sau <p> .. </ p>
Chỉ cần tôi

Toto - Tôi đã có thể chọn mọi thứ để chọn ở giữa các thẻ đó với thứ gì đó tương tự như ^(<p class="text_obisnuit">)\K.*\s{2,}.+?(?=</p>)vậy không chắc chắn nếu bạn có ý tưởng làm cho nó tốt hơn và sau đó thay thế tất cả 2 hoặc nhiều khoảng trống chỉ bằng các ký tự đó.
Pimp Juice IT

@JustMe: Không thể thực hiện chỉ trong một regex vì bạn muốn xóa 2 hoặc nhiều khoảng trắng bằng 1 khoảng trắng, đó là trường hợp cho không gian bên trái sau <p...>, regex này thay thế 2 hoặc nhiều không gian bằng 1 khoảng trắng . Tôi phải chạy regex khác, xem chỉnh sửa của tôi.
Toto

1
@PimpJuiceIT: sự thay thế không giống nhau cho các không gian đầu tiên và cuối cùng, họ muốn xóa hoàn toàn chúng nhưng giữ 1 không gian cho các không gian khác ở giữa. Tôi nghĩ rằng không thể với một regex duy nhất (hoặc có lẽ nó sẽ trở thành phức tạp!)
Toto

0

HTML không quan tâm chung cho khoảng trống. Nếu bạn hiển thị HTML của mình, bạn sẽ thấy các khoảng trống đã biến mất.

Tôi đã tạo cho bạn một JSFiddle để thử nghiệm.

Một giải pháp đơn giản hơn nhiều là chỉ cần thay thế hai khoảng trống bằng một và lặp lại nhiều lần nhất có thể, nhưng các khoảng trống thực sự không quan trọng trừ khi trong văn bản được định dạng trước đang sử dụng <pre> Tag.


xin chào harrymc, nó không phải là về html, nhưng tôi muốn xem mọi thứ theo thứ tự trong notepad ++, không phải là một mớ hỗn độn
Chỉ cần tôi

Với regex rất phức tạp, bạn có nguy cơ phá hủy văn bản hơn là làm đẹp nó. Về làm đẹp: Bạn đã xem plugin Công cụ XML chưa? Nó có thể làm một công việc tốt hơn regex trong việc làm cho văn bản của bạn có thể đọc được. Nó cũng hoạt động với HTML, không chỉ XML.
harrymc

0

TÌM GIẢI PHÁP:

TÌM KIẾM:

(?s)(\G|<p class="text_obisnuit">)((?!</p>).)*?\K((?<=>)\h+|\h+(?=<|\h))

THAY THẾ BỞI:

(leave empty)

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.