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 :

regularexpressions 7

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.

TrimWhiteSpace

Viết Script Trong Dynamo

Dựng lại node TrimWhitespace

import System
str = "   Hello Word "
OUT = str.Trim()

Kết quả

TrimWhiteSpace1

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ả

TrimWhiteSpace2

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
Kết quả :

122602993 10223852994499646 1022435221637624473 n

Một số tài liệu để bạn xem thêm

Regular_expression

regularexpressionsSheet