Mở đầu
Hôm nay mình sẽ mở rộng vấn đề với node TrimWhitespace được tạo ra như thế nào nhé.
Trước tiên để vào bài thì ta nên hiểu biểu thức chính quy là gì trước đã. Biểu thức chính quy (Regular expression) được định nghĩa một khuôn mẫu (pattern) tìm kiếm chuỗi. Nó có thể được sử dụng tìm kiếm, sửa đổi, và thao tác trên văn bản. Khuôn mẫu được định nghĩa bởi biểu thức chính quy có thể khớp (match) một hoặc một vài lần, hoặc không khớp với một văn bản cho trước.
Biểu thức chính quy được áp dụng chuẩn cho nhiều ngôn ngữ lập trình và dường như là ít thay đổi.
Biểu thức chính quy (Regular Expression) thường được viết tắt là Regex
Bảng mô tả ngắn gọn các regex thông dụng :
Sử dụng trong Dynamo
TrimWhitespace
trong Dynamo được sử dụng để xóa bỏ các khoảng trắng đầu và cuối một chuỗi.
Viết Script Trong Dynamo
Dựng lại node TrimWhitespace
import System
str = " Hello Word "
OUT = str.Trim()
Kết quả
Chính vì mình không muốn sử dụng dài dòng thêm các node phụ và muốn loại bỏ luôn cả khoảng trắng ngay giữa mỗi chữ nữa, nên mới lòi ra bài viết cụ thể như thế này.Lúc này mình sẽ bắt đầu nghĩ ngay đến một biểu thức chính quy.
Mình sẽ sử dụng quy tắt viết biểu thức chính quy này :
\s
: Ký tự khoảng trắng, viết ngắn gọn cho [ \t\n\x0b\r\f]
+
: Xuất hiện 1 hoặc nhiều lần, viết ngắn gọn cho {1,}
Cuối cùng mình thử viết một cú pháp loại trừ khoảng trắng đơn giản :
Python
import re
s = ' Hello World '
OUT = re.sub(r"\s+", "", s)
Csharp
using System.Text.RegularExpressions;
private static Regex Whitespaces = new Regex(@"\s+");
public static string[] TrimWhitespace(this string input)
{
return Whitespaces.Split(input.Trim());
}
Kết quả
Mở rộng
Trả lời câu hỏi làm sao để bỏ các kí tự bên trong ngoặc, sử dụng regex để loại bỏ dấu ngoặc và các kí tự trong ngoặc.
import re | |
def tolist(obj1): | |
if hasattr(obj1,'__iter__') : return obj1 | |
else : return [obj1] | |
result = [] | |
#Preparing input from dynamo to revit | |
items = tolist(IN[0]) | |
for item in items: | |
result.append(re.sub(r" ?\([^)]+\)", "", item)) | |
OUT = result | |