回答
如果字符串是$_
:
s/\D+?$//;
[編輯]:如果該行可能以結尾,則應使用非貪婪匹配(+?
),以避免剝奪這個角色(感謝DanD指出了這一點)。這是因爲$
將匹配字符串末尾或緊接在字符串末尾的\n
之前。
當行文字工作,它通常是一個好主意,通過調用chomp()
先去掉所有尾隨\n
,然後做力所能及的工作是必要的,最後追加\n
當行寫出。這簡化了處理後綴並計算了行的長度,並且非常有用,perl提供了-l
選項來使單行程的過程自動化。在這種情況下,簡單的s/\D+$//;
可用於:
perl -lpe "s/\D+$//" <in.txt> out.txt
試試這個:$line =~ s/\D+\z//;
我給了這個+1,但值得記住的是'\ z'匹配字符串的結尾,所以如果字符串有一個尾部的'\ n'就不會工作(這會發生,例如,如果你'從文件中讀取文本行而不是'chomp')。 – 2011-02-25 22:48:42
當然會!你告訴我你認爲換行符是'\ d'代碼點,是嗎?既然它不是'\ d',那麼它必須是'\ D'。 Qᴇᴅ。 – tchrist 2011-02-26 01:20:19
@tchrist:真的,它會匹配和去除'\ n',但我不會稱之爲「工作」 - 如果我們正在處理以'\ n'結尾的字符串,它們應該保持以'\ n'結尾,你不同意嗎? – 2011-02-26 02:36:42
試試這個:
$str =~ s/(?<=\d)\D+//;
你可能想扔\b
在那裏,如果有多個目標在線:
$str =~ s/(?<=\d)\D+\b//;
如果你只有萬噸至影響行的最後一場比賽,你可以使用$來代替:
$str =~ s/(?<=\d)\D+$//;
這會將'12ABC345'變成'12345'。 – 2011-02-25 21:57:38
@j_random_hacker:他原來的要求並沒有說這種輸入是一種可能性,或者提出了處理它的規則。它是開放的解釋,所以我提供了最簡單的模式。不過,我已經在編輯建議將其考慮在內。請參閱編輯。 – 2011-02-25 22:02:13
他沒有說它*也不是*的可能性。你不能假設非數字永遠不會出現在一行的中間,僅僅因爲他們沒有在他的一個例子中。此外,不知道你爲什麼建議'\ b' - 也許有線上的其他項目,他不希望尾隨非數字剝離。另外,在OP的帖子中「最後一個數字字符後面」意味着至少有一個數字,所以'(?<\ d)'是不必要的。 – 2011-02-25 22:11:17
s/[A-Za-z]{2}$//;
或者,如果你想要一個一行,在DOS提示符下鍵入在:
perl -pe "s/[A-Za-z]{2}$//" <a.txt >b.txt
這從在每A.TXT行的末尾去除2個字母字符和保存新的數據到b.txt
如果線路沒有按以2個字母字符結尾,那麼該行不會被修改。如果b.txt不存在,則創建它。如果b.txt存在,則b.txt中的任何舊內容都將被銷燬。 a.txt和b.txt需要位於您鍵入單行內容時所處的目錄中,例如如果您在C:\用戶中輸入單行比a.txt和b.txt還需要C:\ users
爲什麼假設後綴將是正好2個字符?他的例子僅僅是一個例子* - 他明確地說,「基本上是從右到左移除最後一個數字後面的任何字符」。爲什麼你認爲a.txt和b.txt需要在C:\?曾聽說過'cd'? – 2011-02-25 22:44:32
是啊,這是真的 - 發佈後我認爲你的答案似乎符合OPs需求更好,因爲它將是最大的。如果您將目錄更改爲使用cd \ users的C:\用戶,那麼這對於單行內容會起什麼作用? – Literat 2011-02-25 22:49:53
啊所以單行工作的任何地方 - 這很好 - 我需要改變我的帖子 – Literat 2011-02-25 22:54:44
- 1. 從python中的字符串中刪除一組前綴字符
- 2. 刪除字符串從後
- 3. 從字符串字符中刪除前綴u's
- 4. 從字符串中刪除字符串
- 5. 從字符串中刪除字符串
- 6. 從文件或字符串中刪除windows字符( )from php/perl
- 7. 刪除TSQL中字符串的前綴
- 8. 如何從後綴樹中刪除子字符串?
- 9. ANT:從字符串中刪除前導/後綴空格
- 10. 從Bash變量中刪除子字符串(後綴)sed
- 11. VB.NET - 從字符串中刪除字符
- 12. 從c字符串中刪除字符
- 13. 從字符串中刪除Unicode字符
- 14. 從字符串中刪除字符
- 15. 從Java字符串中刪除字符
- 16. 從字符串中刪除字符C
- 17. datagridview從字符串中刪除'&'字符
- 18. C從字符串中刪除字符
- 19. 從字符串中刪除字符
- 20. Fortran:從字符串中刪除字符
- 21. jQuery從字符串中刪除' - '字符
- 22. 從字符串中刪除字符?
- 23. 從字符串中刪除字符
- 24. Python:從字符串中刪除字符
- 25. 從字符串中刪除字符[i]
- 26. C++從字符串中刪除字符
- 27. 從C字符串中刪除字符
- 28. Perl:遇到某個字符後刪除其餘的字符串
- 29. 動態刪除最後一個字符串後/從字符串
- 30. 刪除perl中的字符串中的字符和數字
是否有任何刪除每行結尾的換行符的可能性有了這個? \ n由\ D匹配,所以假設如果您將它放在一個經過文件中每一行的while塊中,它也會刪除\ n?或者我有這個錯誤? – Literat 2011-02-25 22:45:03
@DanD:你說得很對,我會更新。在做任何事情之前,我通常會假定這條路線已經被砍掉了,但是明確的話是值得的。 – 2011-02-25 22:52:22