160 lines
4.3 KiB
Python
160 lines
4.3 KiB
Python
"""
|
||
名称规范化工具模块
|
||
|
||
提供统一的名称规范化函数,用于处理各类名称中的括号和附加信息。
|
||
适用于:角色名、地区名、物品名等。
|
||
"""
|
||
|
||
|
||
def _remove_parentheses(name: str) -> str:
|
||
"""
|
||
通用的括号移除函数:去除字符串中首个括号及其内容。
|
||
|
||
支持的括号类型:() () [] 【】 「」 『』 <> 《》
|
||
|
||
Args:
|
||
name: 原始字符串
|
||
|
||
Returns:
|
||
去除首个括号后的字符串(去除前后空格)
|
||
|
||
Examples:
|
||
>>> _remove_parentheses("张三(元婴)")
|
||
'张三'
|
||
>>> _remove_parentheses("青云林海(千年古松(金丹))")
|
||
'青云林海'
|
||
>>> _remove_parentheses("青云鹿角 -(练气)")
|
||
'青云鹿角 -'
|
||
"""
|
||
s = str(name).strip()
|
||
brackets = [
|
||
("(", ")"), ("(", ")"),
|
||
("[", "]"), ("【", "】"),
|
||
("「", "」"), ("『", "』"),
|
||
("<", ">"), ("《", "》")
|
||
]
|
||
|
||
for left, right in brackets:
|
||
idx = s.find(left)
|
||
if idx != -1:
|
||
# 找到左括号,去除从此开始到字符串末尾的内容
|
||
s = s[:idx].strip()
|
||
break
|
||
|
||
return s
|
||
|
||
|
||
def normalize_avatar_name(name: str) -> str:
|
||
"""
|
||
规范化角色名字:去除括号及其中的附加信息(如境界)。
|
||
|
||
Args:
|
||
name: 原始角色名字,可能包含境界等附加信息
|
||
|
||
Returns:
|
||
规范化后的角色名字
|
||
|
||
Examples:
|
||
>>> normalize_avatar_name("张三(元婴)")
|
||
'张三'
|
||
>>> normalize_avatar_name("张三,境界:元婴")
|
||
'张三,境界:元婴'
|
||
"""
|
||
return _remove_parentheses(name)
|
||
|
||
|
||
def normalize_region_name(name: str) -> str:
|
||
"""
|
||
规范化地区名称:去除括号及其中的附加信息(如灵气密度、动植物等)。
|
||
|
||
处理多层括号:递归去除所有括号及其内容。
|
||
|
||
Args:
|
||
name: 原始地区名称,可能包含资源等附加信息
|
||
|
||
Returns:
|
||
规范化后的地区名称
|
||
|
||
Examples:
|
||
>>> normalize_region_name("太白金府(金行灵气:10)")
|
||
'太白金府'
|
||
>>> normalize_region_name("青云林海(千年古松(金丹))")
|
||
'青云林海'
|
||
"""
|
||
s = str(name).strip()
|
||
brackets = [
|
||
("(", ")"), ("(", ")"),
|
||
("[", "]"), ("【", "】"),
|
||
("「", "」"), ("『", "』"),
|
||
("<", ">"), ("《", "》")
|
||
]
|
||
|
||
# 递归去除所有括号(用于处理嵌套括号)
|
||
while True:
|
||
found = False
|
||
for left, right in brackets:
|
||
start = s.find(left)
|
||
end = s.rfind(right)
|
||
if start != -1 and end != -1 and end > start:
|
||
s = (s[:start] + s[end + 1:]).strip()
|
||
found = True
|
||
break
|
||
if not found:
|
||
break
|
||
|
||
return s
|
||
|
||
|
||
def normalize_item_name(name: str) -> str:
|
||
"""
|
||
规范化物品名称:去除境界标识等附加信息。
|
||
|
||
处理格式:
|
||
- "青云鹿角 -(练气)" -> "青云鹿角"
|
||
- "风速马皮(筑基)" -> "风速马皮"
|
||
|
||
Args:
|
||
name: 原始物品名称,可能包含境界等附加信息
|
||
|
||
Returns:
|
||
规范化后的物品名称
|
||
|
||
Examples:
|
||
>>> normalize_item_name("青云鹿角 -(练气)")
|
||
'青云鹿角'
|
||
>>> normalize_item_name("风速马皮(筑基)")
|
||
'风速马皮'
|
||
"""
|
||
s = _remove_parentheses(name)
|
||
# 额外处理:去除尾部的 " -" 标记
|
||
s = s.rstrip(" -").strip()
|
||
return s
|
||
|
||
|
||
def normalize_weapon_type(name: str) -> str:
|
||
"""
|
||
规范化兵器类型名称:映射到标准的WeaponType枚举值。
|
||
|
||
处理格式:
|
||
- 去除空格和多余符号
|
||
- "剑"/"剑类"/"剑兵器" -> "剑"
|
||
|
||
Args:
|
||
name: 兵器类型名称
|
||
|
||
Returns:
|
||
规范化后的兵器类型名称(WeaponType.value)
|
||
|
||
Examples:
|
||
>>> normalize_weapon_type("剑 ")
|
||
'剑'
|
||
>>> normalize_weapon_type("刀类")
|
||
'刀'
|
||
"""
|
||
s = str(name).strip()
|
||
# 移除常见后缀
|
||
for suffix in ["类", "兵器", "武器"]:
|
||
if s.endswith(suffix):
|
||
s = s[:-len(suffix)].strip()
|
||
return s
|