【发布时间】:2017-03-25 00:12:21
【问题描述】:
我有字符串列表,需要找到所有符合这个逻辑的字符串
twodigits.twodigits
Example| Correct?
----------- | ------
03.38 | Yes
10.59 | Yes
10.23 m3/h | No
50.8 mm | No
我试图只寻找“。”但没用...
for i in elements:
id = i.Id
if i.Text[2:3] == '.':
i.Text= ''
atext1.append(i.Text)
我找到了这个,但不确定如何在我的代码中使用它?
str_extract_all(text, "\\d{2}.\\d{2}") %>%
我目前的答案代码:
for i in elements:
id = i.Id
match = search('\d{2}\.\d{2}$',i.strip())
if match:
atext1.append(match.string)
i.Text= ''
#atext1.append(i.Text)
else:
atext2.append(i.Text)
atext.append(i.Text)
再试一次还是不行
for i in elements:
id = i.Id
k = i.Text
atext3.append(k)
match=search('\d{2}\.\d{2}$',k.strip())
if match: atext4.append(match.string)
i.Text= ''
这个也没有成功
for i in elements:
id = i.Id
k = i.Text
atext3.append(k)
if k.split('.')[0:2].isdigit():
i.Text= ''
atext3.append(i.Text)
我终于搞定了。谢谢大家的帮助
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
from re import search
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
#The inputs to this node will be stored as a list in the IN variable.
#from re import search
atext3 = []
atextTrue = []
atextFalse = []
atextAll = []
#unwrap all elements to use with API
elements = []
for i in IN[0]:
elements.append(UnwrapElement(i))
TransactionManager.Instance.EnsureInTransaction(doc)
for i in elements:
atext3 = i.Text
match = search('\d{2}\.\d{2}$', atext3.strip())
if match:
i.Text = 'deletedTEXT'
atextTrue.append(i.Text)
else:
atextFalse.append(i.Text)
atextAll.append(i)
TransactionManager.Instance.TransactionTaskDone()
#Assign your output to the OUT variable
OUT = atextTrue, atextFalse, atextAll
【问题讨论】:
-
是的,当然列表在顶部,这里是示例 [03.38, 10.59, 10.23 m3/h, 50.8 mm, koza, VCD, 48l/s, 10.203, 02.72, 03.55。 ]
-
在
10.23 m3/h的情况下,您是要提取10.23还是完全跳过它,因为它不只包含twodigits.twodigits? -
我想跳过它......我还需要将它插入到我的 if 中,因为我需要为列表中的每个项目替换此文本并且如果匹配则替换为 None 所以 i.Text= '' 此行如下
-
鉴于您在上面发布的示例,您能否发布预期输出的示例?
-
感谢所有这些令人惊叹的选项...这对我来说看起来有点复杂,不知道如何在我的代码中实现。我使用 Dynamo 并连接到 Revit。所以我有 10000 个元素阅读文本并有列表。如果与我的模式匹配,则需要查找每个索引,然后运行行以用 Nothing ( i.Text= '' ) 替换此索引值。正如我上面的代码......让我尝试所有这些选项
标签: python python-2.7 filtering