我有一個句子,其中夾雜著數字(整數和浮點數),并且經常與其他詞語合并在一起。我想把數字和文字分開,并把它作為一個句子。
下面是一些作業。
下面做了一些作業。
str1 = str1="test1.25nb 5test.5NB 00.5my_test 5unit 5.6"
re.findall(r'd*.*d .*d*'/span>, str1)
re.split(r'd*.*d .*d*', str1)
但是,我想不出一個更好的方法,可以很好地得到一個結果。
輸入:str1="test1.25nb 5test.5NB 00.5my_test 5unit 5.6"
預期輸出:test 1.25 nb 5 test . 5 NB 00.5 my_test 5 unit 5.6"
預先感謝。
uj5u.com熱心網友回復:
你可以使用
import re
str1 = "test1.25nb 5test .5NB 00.5my_test 5unit 5.6"
print( " ".join(re.split(r's*(d*. ?d )s*', str1) )
# => test 1.25 nb 5 test .5 NB 00.5 my_test 5 unit 5.6
或者,直接使用re.sub,并在最后使用strip():
print( re.sub(r's*(d*. ?d )s*', r' 1 ', str1) .strip() )
參見Python演示。s*(d*.?d )s*重碼匹配
s*- 零或更多的空白 。
(d*.?d )- 捕捉到第一組(因此這些值也存在于用re.split產生的串列中)零個或多個數字,一個可選的.和一個或多個數字 。
s*- 零個或多個空格。
請看regex演示。
uj5u.com熱心網友回復:
如果你對正則運算式不感冒,這可能更容易理解:
import string
str1 = "test1.25nb 5test .5NB 00.5my_test 5unit 5.6"/span>
cnt = len(str1)
str2 = ""/span>
numdigits = string.digits " 。
print(str1)
for i, c in enumerate(str1)。
str2 = c
if i < cnt - 1:
nextc = str1[i 1]
if c in numdigits and nextc in string。 ascii_letters or c in string.ascii_letters and nextc in numdigits。
str2 = " "/span>
print(str2)
基本邏輯很簡單:對于每個字符,在下一個字符處達到峰值,看看是否有字母和數字狀態的變化。如果是,就插入一個空格。
注意,enumerate(list)內置函式回傳一對值,即一個索引值和串列的下一個元素。這可以簡化回圈中的索引程序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/323792.html
標籤:
