Xóa văn bản tối đa (bao gồm) thứ hai đến giai đoạn cuối (hoặc `: //` nếu chỉ một khoảng thời gian)


0

Tôi có các dữ liệu sau:

http://123.456.789.10.com
http://789.12340.com
http://456.789.1123123rs.com
http://12321.com

Những gì tôi đang cố gắng làm là đưa văn bản lên đến giai đoạn thứ hai đến giai đoạn cuối. ví dụ: công thức sẽ trả về các giá trị này:

10.com
12340.com
1123123rs.com
12321.com

Lưu ý: Nếu chỉ có một khoảng thời gian (như trong ví dụ cuối cùng), tôi muốn loại bỏ mọi thứ lên đến (bao gồm) ://.

Tôi đã thử: (giá trị được lưu trữ trong ô D2)

=RIGHT(D2,FIND(".",D2,FIND(".",D2)+1)-1) (không hoạt động tốt khi sử dụng ĐÚNG, nhưng nó hoạt động hoàn hảo khi sử dụng TRÁI)

=RIGHT(D2,FIND(".",D2)+1)

Tôi không biết những gì đang thiếu ...

Ai đó có thể giúp gì không?


2
Ví dụ của bạn mâu thuẫn với mô tả của bạn về vấn đề.
AFH

Từ thời kỳ thứ hai từ trái, hay từ phải?
MarianD

1
@MarianD Để thêm vào câu hỏi của MarianD, và bạn muốn gì khi chỉ có một khoảng thời gian?
Rey Juna

Vì vậy, chỉ để xác minh ... Bạn có muốn văn bản sau khoảng thời gian thứ hai từ bên trái, hoặc bạn muốn văn bản sau khoảng thời gian thứ hai từ bên phải? tức là http://0.1.2.3.4.5.6.7.8.9.arenumbers.comtrở thành 2.3.4.5.6.7.8.9.arenumbers.comhay nó trở thành arenumbers.com?
3D1T0R

arenumbers.com là đầu ra mà tôi đang tìm kiếm.
MrServer

Câu trả lời:


1

Khá chắc chắn công thức sau đây sẽ làm những gì bạn muốn:

Tóm tắt thuật toán:

sử dụng công cụ đánh giá công thức để trêu chọc nó và xem cách nó hoạt động chi tiết. Như đã lưu ý trong các bình luận, bạn sẽ thấy rằng việc 99đặt giới hạn số lượng ký tự bạn có thể trả về. Điều này có thể phải được thay đổi nếu dữ liệu trả về của bạn có thể dài hơn

  • loại bỏ mọi thứ lên đến và bao gồm ://
  • thay thế thứ 2 từ dấu chấm cuối cùng bằng một ký tự hiếm khi được sử dụng
  • sử dụng FINDhàm để xác định vị trí thay thế đó để tạo số Bắt đầu cho MIDhàm

=MID(A1,FIND("://",A1)+2+FIND(CHAR(1),SUBSTITUTE("." &MID(A1,FIND("://",A1)+3,99),".",CHAR(1),LEN("." &A1)-LEN(SUBSTITUTE("." &A1,".",""))-1)),99)

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


Việc sử dụng của bạn CHAR(1)là một ý tưởng tốt, nhưng điều này không hiệu quả nếu kết quả cuối cùng rất dài, vì nó cắt ngắn nó ở 99 ký tự.
3D1T0R

@ 3D1T0R Nó hoạt động cho các ví dụ đã cho. Nếu bạn có kết quả cuối cùng dài hơn trong dữ liệu của riêng bạn, bạn nên thay đổi giá trị đó để chuỗi sẽ không bị cắt ngắn.
Ron Rosenfeld

Tôi không có dữ liệu mà tôi cảm thấy cần điều này, chỉ nêu ra một vấn đề với nó để nếu ai đó có dữ liệu rất dài họ có thể thấy rằng điều này sẽ không hoạt động tốt cho họ.
3D1T0R

@ 3D1T0R OK. Tôi có những kỳ vọng khác nhau của khán giả. Tôi nghĩ rằng bình luận của bạn có thể hữu ích nếu bạn viết, thay vào đó, một cái gì đó chỉ ra rằng tham số đó có thể cần phải được điều chỉnh cho dữ liệu rất dài. Thay vào đó, tôi chỉ ra rằng người đọc nên sử dụng công cụ đánh giá công thức để kiểm tra các chi tiết cụ thể. Bằng cách đó, họ sẽ có thể tự mình tìm ra điều đó.
Ron Rosenfeld

1
Bạn có thể dễ dàng khắc phục sự cố mà tôi đã chỉ ra bằng cách thay thế 99bằng LEN(A1), sau đó độ dài tối đa của kết quả sẽ là độ dài của văn bản gốc và do đó sẽ luôn ít nhất là (thực tế dài hơn) kết quả thực tế.
3D1T0R

0
=RIGHT(D2, 
 LEN(D2) - FIND("\", SUBSTITUTE(D2, ".", "\", LEN(D2) - LEN(SUBSTITUTE(D2, ".", "")) - 1))

Giải thích:

Đầu tiên, chúng ta có được số lượng thời gian với thủ thuật đơn giản này:

  1. Chúng tôi xác định độ dài của toàn văn bản :
    =LEN(D2) (xem cột Etrong hình)
  2. Chúng tôi xác định độ dài của cùng một văn bản nhưng đã xóa tất cả các khoảng thời gian :
    =LEN(SUBSTITUTE(D2, ".", "")) (xem cột Ftrong hình)
  3. Sự khác biệt sẽ là số lượng thời gian :
    =LEN(D2) - LEN(SUBSTITUTE(D2, ".", "")) (xem cột Gtrong hình)

Thứ hai, như chúng ta đã biết số lượng thời gian , chúng ta có thể xác định số lần xuất hiện của lần cuối nhưng một khoảng thời gian . Ví dụ: nếu số lượng thời gian là 5, thời gian cuối cùng nhưng một khoảng thời gian có số lần xuất hiện 4:

  • =LEN(D2) - LEN(SUBSTITUTE(D2, ".", "")) - 1 (xem cột Htrong hình)

Thứ ba, chúng tôi sử dụng tham số này làm tham số thứ 4 của hàm SUBSTITUTE () để thay thế sự xuất hiện của khoảng thời gian đó bằng \ký hiệu:

  • =SUBSTITUTE(D2, ".", "\", LEN(D2) - LEN(SUBSTITUTE(D2, ".", "")) - 1) (xem cột Itrong hình)

Thứ tư, chúng tôi xác định vị trí của ký hiệu đó ( \) bằng hàm FIND ():

  • =FIND("\", SUBSTITUTE(D2, ".", "\", LEN(D2) - LEN(SUBSTITUTE(D2, ".", "")) - 1)) (xem cột Jtrong hình)

Thứ năm, như chúng ta đã biết vị trí của ký hiệu đó ( \)độ dài của toàn văn bản, chúng ta có thể xác định số lượng các ký hiệu còn lại , tức là các ký hiệu sau \ . Đối với bài kiểm tra, nếu độ dài của toàn văn bản là 5 và vị trí \là 3, có 2 ký hiệu còn lại:

  • =LEN(D2) - FIND("\", SUBSTITUTE(D2, ".", "\", LEN(D2) - LEN(SUBSTITUTE(D2, ".", "")) - 1)) (xem cột Ktrong hình)

Cuối cùng, chúng tôi sử dụng nó làm tham số thứ hai của RIGHT()hàm:

  • =RIGHT(D2, LEN(D2) - FIND("\", SUBSTITUTE(D2, ".", "\", LEN(D2) - LEN(SUBSTITUTE(D2, ".", "")) - 1)) (xem cột Ltrong hình)

nó là công thức cuối cùng .

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


Chú thích:

Ví dụ cuối cùng trong câu hỏi không có lần thứ hai mà chỉ có một khoảng thời gian (mâu thuẫn với tiêu đề của câu hỏi). Để bao gồm khả năng đó, hãy thêm .sau http://, tức là thay thế tất cả D2trong công thức bằng

=SUBSTITUTE(D2, "//", "//.")

Lưu ý: Điều này sẽ gây rối nếu dữ liệu của bạn chứa các \ký tự sau ://. Nếu bạn sử dụng công thức này, tôi khuyên bạn nên sử dụng @ lừa của việc sử dụng RonRosenfeld của CHAR(1)thay vì \, vì nó là nhiều ít có khả năng rằng dữ liệu của bạn sẽ chứa các "Start thuộc nhóm" nhân vật hơn là một \.
3D1T0R

@ 3D1T0R, ký tự dấu gạch chéo ngược (\) không được phép trong URI và cũng như trong URL - xem Chương 2 (Ký tự) trong RFC 3986 .
MarianD

Đúng, nhưng điều đó không có nghĩa là không thể có dấu gạch chéo ngược trong dữ liệu của ai đó. Những người khác có thể đến đây trong tương lai không muốn sử dụng URL này và họ có thể có dấu gạch chéo ngược hoặc các ký tự không mong muốn khác trong dữ liệu của họ, nhưng ít có khả năng họ sẽ có các ký tự không thể gõ trực tiếp trên bàn phím và rất khó có khả năng họ sẽ có ký tự "Bắt đầu tiêu đề" trong dữ liệu của mình trừ khi bị hỏng, trong trường hợp đó, có những việc khác họ nên làm với dữ liệu của mình trước khi xử lý theo cách này.
3D1T0R

0

=IF(LEN(A1)-LEN(SUBSTITUTE(A1, ".", "", 2)), SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(A1, ".", REPT(" ", LEN(A1))), LEN(A1)*2)), " ", "."), IFERROR(RIGHT(A1, LEN(A1)-FIND("://", A1)-2), A1))

Cái này hoạt động ra sao?

Đầu tiên chúng tôi có một IFtuyên bố cho phép chúng tôi đối xử với mọi thứ khác nhau nếu có một (hoặc ít hơn) hoặc nếu có ít nhất 2 giai đoạn.

Kiểm tra logic của chúng tôi là kiểm tra xem có giai đoạn thứ hai hay không: LEN(A1)-LEN(SUBSTITUTE(A1, ".", "", 2))
Điều này sẽ trở lại 0nếu không thể tìm thấy 2 dấu chấm trong chuỗi hoặc 1) nếu có 2 hoặc nhiều hơn.

Sau đó, chúng tôi đặt công thức 'nếu có 2 tiết trở lên trước và công thức' nếu có ít hơn 2 tiết 'thứ hai, nhưng vì công thức sau đơn giản hơn nhiều, tôi sẽ trình bày trước.

Nếu có ít hơn 2 tiết:

Nếu có một hoặc không có thời gian, thì chúng ta cần xóa văn bản lên và bao gồm cả phần ://đầu, vì vậy chúng ta sẽ tìm vị trí của ://và chỉ lấy văn bản sau nó: RIGHT(A1, LEN(A1)-FIND("://", A1)-2)
Chỉ trong trường hợp có dữ liệu không ' Để bắt đầu với một giao thức kết thúc, ://chúng ta nên kết hợp nó với một IFERRORvà lấy toàn bộ chuỗi gốc thay vì một #VALUElỗi, điều này kết thúc là:IFERROR(RIGHT(A1, LEN(A1)-FIND("://", A1)-2), A1)

Nếu có (ít nhất) 2 tiết

Bây giờ chúng ta có các trường hợp đơn giản hơn, hãy xem điều gì xảy ra khi có 2 (hoặc nhiều hơn): SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(A1, ".", REPT(" ", LEN(A1))), LEN(A1)*2)), " ", ".")

Hãy phá vỡ nó:

  1. Chúng tôi thay thế tất cả các dấu chấm bằng một số lượng lớn khoảng trắng (có nhiều ký tự trong toàn bộ chuỗi gốc): SUBSTITUTE(A1, ".", REPT(" ", LEN(A1)))
  2. Chúng tôi chỉ mất phần cuối của điều đó, cụ thể là gấp đôi chiều dài của chuỗi gốc. Điều này cung cấp cho chúng tôi hai phần cuối cùng và một loạt các khoảng trắng trước và giữa hai phần: RIGHT(<step 1>, LEN(A1)*2)
    Lưu ý: Nếu bạn cũng muốn bao gồm phần tiếp theo, bạn sẽ đổi *2thành *3.
  3. Chúng tôi loại bỏ tất cả các không gian bên ngoài bằng cách sử dụng TRIM, chỉ còn lại một không gian duy nhất, trong đó khoảng thời gian còn lại được cho là:TRIM(<step 2>)
  4. Chúng tôi thay thế một không gian còn lại bằng .:SUBSTITUTE(<step 3>, " ", ".")

Vì vậy, toàn bộ công thức của chúng tôi là: =IF(LEN(A1)-LEN(SUBSTITUTE(A1, ".", "", 2)), SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(A1, ".", REPT(" ", LEN(A1))), LEN(A1)*2)), " ", "."), IFERROR(RIGHT(A1, LEN(A1)-FIND("://", A1)-2), A1))


Bạn cũng có thể sử dụng ký tự "Không" thay cho khoảng trắng (như được đề xuất bởi @Roy trong câu trả lời của anh ấy) bằng cách thay thế " "bằng CHAR(172)cả hai nơi được sử dụng, do đó ngăn ngừa một số vấn đề có thể xảy ra do dữ liệu chứa khoảng trắng. (Lưu ý: Vẫn có thể có một số vấn đề nếu kết quả của bạn cần chứa nhiều khoảng trắng cạnh nhau.)
3D1T0R

0

Công thức thông thường sử dụng SUBSTITUTE()để thay thế tất cả các ký tự quan tâm, khoảng thời gian trong trường hợp này, bằng các chuỗi dài tùy ý so với dữ liệu mà người ta có thể tìm thấy một cách hợp lý trong một ô.

Ví dụ: nếu một bộ ký tự dài nhất giữa các khoảng thời gian có thể là, ồ, 95 trong dữ liệu dự kiến ​​của bạn, thì chuỗi thay thế, giả sử, 250 "khoảng trắng" thay thế mỗi khoảng thời gian sẽ hoạt động tốt.

Sau đó bọc SUBSTITUTE()hàm trong một RIGHT()hàm. Nếu kết quả của bạn chỉ dài 3 ký tự, bạn cần có 253 ký tự ở bên phải. Bạn có 502 trước khi bạn nhận bất cứ thứ gì không mong muốn. Nếu 95 đầy đủ dự kiến ​​cộng với 250 khoảng trắng cộng với 95 không gian khác sẽ có kết quả, bạn cần 420 ký tự để tự trang trải. Nhưng vẫn có 502 bạn có thể lấy mà không cần lấy các ký tự không mong muốn. Vì vậy, chọn một số giữa mức tối đa bạn mong đợi, 420 và mas bạn có thể sử dụng, 502: có lẽ là 490 và lấy đúng 49 ký tự với RIGHT()hàm.

Bây giờ hãy bọc SUBSTITUTE()hàm xung quanh đó, lần này thay thế khoảng trắng bằng "" để tất cả các khoảng trắng được giới thiệu biến mất và bạn có kết quả mong muốn.

Nếu khoảng trắng có thể nằm trong kết quả mong muốn, hãy sử dụng một ký tự khác sẽ không có. Một cái gì đó kỳ lạ trong danh sách các ký tự có thể có của phông chữ. Có lẽ ¬ (Alt-01452). Hoặc đừng mạo hiểm và sử dụng nó thay vì sử dụng khoảng trắng.

Đừng gõ 250 chỗ trống. Sử dụng REPT()chức năng trong chức năng (nội thất) đầu tiên SUBSTITUTE()để nhập ký tự lựa chọn một lần nhưng nhận 250 trong số chúng!

Có những cách tiếp cận khác nhưng chúng thường liên quan đến việc biết có bao nhiêu nhân vật có thể có. Chẳng hạn, dữ liệu của bạn có thể được định dạng đủ để biết luôn có 4 tiết. Sau đó, những công việc độc đáo. Nhưng nếu nó có thể thay đổi, 3 ở đây, 7 ở đó, cũng ...

Trên đây là "tàn bạo" chứ không phải "thanh lịch" nhưng ai thực sự quan tâm? Đơn giản trong việc thụ thai rất dễ sử dụng và nó thực hiện thủ thuật của bạn.

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.