在我們的專案中,有兩種型別的坐標。 普通的坐標有x、y和z
例子:101, 520, 62。
960.93 764.22 59.20
以及帶有6位數字的擴展版本(2xxyz代表位置和旋轉)。 例如:
101 520 62 3 0 0
960.93 764.22 59. 20 -0.340.00 -89.81
它們可以是負數,可以是浮點數,可以是四舍五入的數字。 它們可以用逗號或什么都不隔開
使用python,我試圖在一個字串中找到任何坐標。示例:
textbefore 101, 520, 62
GOTO 960.93 796.22 59. 20 -0.34 0.00 -89.81[/span
5GOTO 1960.93 1796.22 159. 20 -0.34 0.00 -89.81[/span
501, 513, 162.
1040, 1040, 520文本后
錯誤
222, 222.
1500, 1500, 60 (1)。
1337 1337 65
124.5, 133.6, 35.4.
15:13:26 條件:index_ ! = StringList::npos [行 178](125, 157, 215)
分配影子map快取6324 x 6324。76.28 MB
在完美的世界里,輸出應該是:
101 520 62
960.93 796.22 59. 20 -0.340.00 -89.81
1960.93 1796.22 159. 20 -0.34 0.00 -89.81[/span
501 513 162
1040 1040 520
1500 1500 60
1337 1337 65
124.5 133.6 35.4
125 157 215
最后一行 "分配影子地圖,有點棘手,如果這一行失敗了,被列為坐標,那也沒什么。
我在這里使用了這段代碼,它能很好地過濾數字,然后我在檢查6或3個數字,但我在有更多數字的行中遇到了問題。 所以我需要一個邏輯來檢查這些數字是否彼此 "接近",甚至是用字隔開。
re.findall("[- ]? [.]? [d] (?:,ddd)*[.]?d*(?: [eE][- ]?d )?", line)
如果可能的話,代碼應該在Python 2.7上作業(遺憾的是我們已經遠遠落后了)。
謝謝
uj5u.com熱心網友回復:
你可以使用下面的regex來實作這個目的
(?:(?:[ -]?d . d*[ ,] ){5}[ -]?d .?d*)|(?:(?:[ -]?d .?d*[ ,] ){2}[ -]?d .?d*)
這將搜索2/5個以,或空格為界的連續數字和第3/6個非數字值的數字。
這里是一個演示。
輸出
['101, 520, 62'。
'960.93 796.22 59.20 -0.34 0.00 -89.81'。
'1960.93 1796.22 159.20 -0.34 0.00 -89.81'。
'501, 513, 162',
'1040, 1040, 520',
'1500, 1500, 60',
'1337 1337 65'。
'124.5, 133.6, 35.4',
'125, 157, 215']
uj5u.com熱心網友回復:
在深入研究代碼之前,你需要在psuedocode中找出一種演算法或方法,它可以完成你的要求。 在這個例子中,你需要創建python代碼來識別一個數字:
def is_number(input)。
if type(input) == int or type(input) == float。
return True: return True: True
else:
然后我將在空格或逗號上進行分割,并通過你創建的陣列進行決議,尋找連續的3或6個真值
。uj5u.com熱心網友回復:
s = ''textbefore 101, 520, 62
轉到960.93 796.22 59.20 -0.34 0.00 -89.81
5goto 1960.93 1796.22 159.20 -0.34 0.00 -89.81
501, 513, 162
1040, 1040, 520后的文字
錯誤
222, 222
1500, 1500, 60 (1)
1337 1337 65
124.5, 133.6, 35.4
15:13:26 條件:index_ != StringList::npos [行 178](125, 157, 215)
正在分配影子地圖快取6324 x 6324。76.28 MB''
s = s.split('
')
s_row = []
for i in range(len(s))。
s_row.append(s[i].replace(',', ' ').split(' '))
協調 = []
for i in range(len(s_row))。
coord_row = []
for j in range(len(s_row[i]) )。
try:
s_row[i][j] = float(s_row[i][j])
coord_row.append(s_row[i][j])
except ValueError:
None
if coord_row !=[]:
coord.append(coord_row)
將給你以下輸出:
。
[[101.0, 520.0, 62.0]
[960.93, 796.22, 59. 2, -0.34, 0.0, -89.81]
[1960.93, 1796.22, 159. 2, -0.34, 0.0, -89.81]
[501.0, 513.0, 162.0]
[1040.0, 1040.0, 520.0]
[222.0, 222.0]
[1500.0, 1500.0, 60.0]
[1337.0, 1337.0, 65.0]
[124.5, 133.6, 35.4]
[157.0]
[6324.0, 76.28 ]]
uj5u.com熱心網友回復:
你可以用一個正則運算式來做這個。由于 python 中的 re 模塊不能很好地處理重復的或嵌套的捕獲組,你最好從各個部分組裝一個更大的 regex。
r"([- ]? [d ][.d]*)"/span>
是一個正則運算式,將匹配小數或帶可選符號的浮點數。[- ]? 匹配符號,[d ] 匹配點之前的至少1個小數,[.d]* 匹配浮點的可選小數部分,外部的()告訴 regex 發出捕獲的字串。
r"[ , ]*"
是小數/浮點數之間的分隔符。現在你可以直接把3和6這些東西一起寫出來,但是下面的代碼用一點python就可以做到。
import re
import io
test = io.StringIO(""textbefore 101, 520, 62
得到960.93 796.22 59.20 -0.34 0.00 -89.81
5goto 1960.93 1796.22 159.20 -0.34 0.00 -89.81
501, 513, 162
1040, 1040, 520后的文字
錯誤
222, 222
1500, 1500, 60 (1)
1337 1337 65
124.5, 133.6, 35.4
15:13:26 條件:index_ != StringList::npos [行 178](125, 157, 215)
正在分配影子地圖快取6324 x 6324。76.28 MB""")
# 從匹配1個小數或浮點坐標到3個或6個坐標的組合詞。
_one = r"([- ]? [d ][.d]*)"
_sep = " [ , ] "
coord_3 = re.compile(_sep.join([_one]*3))
coord_6 = re.compile(_sep.join([_one]*6))
coords = []
for line in test:
match = coord_6.search(line) or coord_3.search(line)
if match is not None:
print(match.group())
coords.append(" ".join(match.group()))
for c in coords:
print(c)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/309339.html
標籤:
上一篇:根據給定的選項讀取檔案
