我有一些字串,其中一些是胡言亂語,是數字和字母的混合物。我想洗掉那些胡言亂語,但我想保留那些有模式的字串。
我提供一個例子來說明問題。
strings = ["1Z83E0590391137855",
"55t55t5t5tttt5t55tttttgggggggggggggsss"。
"1st", "2st", "3st", "4st", "5st"。
]
import pandas as pd
df = pd.DataFrame(strings, columns=['strs'] )
df
我想洗掉那些看起來像
的字串1Z83E0590391137855
55t5555t5t5tttt5t5555tttttttgggggggsss
并保留看起來像下面這些的字串
1st
第2次
第3次
第四次
第五次
鑒于我有限的regex和python經驗,我很難想出正確的表述。我嘗試了一下,除了第一行之外,已經洗掉了所有的東西:
df['strs'] = df['strs'] 。 str.replace(r'(?=.*[a-z])(?=.*[d])[a-zd] ', ' ', regex=True)
uj5u.com熱心網友回復:
我建議只匹配包含字母和數字的字母數字字串,并包含一定數量的字符。
在下面的例子中,我將閾值設定為18,也就是說,短于18個字符的字串將不會被匹配,因此將保留在該列中。所有相等或更長的字串將被洗掉:
在下面的例子中,我將閾值設定為18,即短于18個字符的字串將被匹配,因此將保留在列中。
df['strs'] = df['strs'].str. replace(r'^(?=.{18})(?:[a-zA-Z] d|d [a-zA-Z])[a-zA-Zd]*$', ' ', regex=True)
詳情:
^--字串的開始 。
(?=.{18})- 字串必須以18個字符開始,而不是斷行符 。
(?:[a-zA-Z] d|d [a-zA-Z])- 一個或多個字母,然后一個數字,或一個或多個數字,然后一個字母 。
[a-zA-Zd]*- 零個或多個字母數字字符 。
$--字串的結束。
請看regex演示。
uj5u.com熱心網友回復:
你可以檢查該行是否以第1次第2次開始......來只洗掉這些行。
^(?!d (?:st|nd|rd|th)$).*$
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/323799.html
標籤:
