支持省略年字:数字后紧跟干支时按年份解析(民国二十五丙子)
This commit is contained in:
@@ -316,6 +316,10 @@ _year_digits = '〇零一二三四五六七八九十廿卄卅卌' + '0123456789
|
||||
_known_era_alt = '|'.join(sorted(KNOWN_ERAS_ALL, key=len, reverse=True))
|
||||
_known_era_group = r'(?P<era>' + _known_era_alt + r')'
|
||||
_yd = '[' + _year_digits + ']'
|
||||
# 年份后缀:"年"字可省,但只在紧跟合法干支时才成立——碑谱/契约常见写法
|
||||
# ("光绪二十六庚子" = 光绪二十六年庚子,"民国二十五丙子" = 民国二十五年丙子)。
|
||||
# 干支是判定依据:省"年"的年份后面必然跟干支,否则不认(防止"康熙二十"这类普通数字误匹配)。
|
||||
_year_suffix = r'(?:年|(?=' + _gz_pair + r'))'
|
||||
|
||||
def _build_pattern(with_dynasty=True):
|
||||
"""构建年号正则:已知年号优先 + 通用兜底(仅限有朝代前缀时)"""
|
||||
@@ -330,7 +334,7 @@ def _build_pattern(with_dynasty=True):
|
||||
|
||||
if with_dynasty:
|
||||
# 有朝代前缀:年号后直接跟年份数字,无需额外约束
|
||||
era_year = _known_era_group + r'(?P<year>' + _yd + r'+)年'
|
||||
era_year = _known_era_group + r'(?P<year>' + _yd + r'+)' + _year_suffix
|
||||
era_yuan = _known_era_group + r'元年'
|
||||
patterns = [
|
||||
re.compile(dynasty_part + boundary + era_year),
|
||||
@@ -341,8 +345,8 @@ def _build_pattern(with_dynasty=True):
|
||||
]
|
||||
else:
|
||||
# 无朝代前缀:年号后必须紧跟年份数字(前瞻断言),防止"永乐大帝"误匹配
|
||||
_year_ahead = r'(?=' + _yd + r'+年|元年)'
|
||||
era_year = _known_era_group + _year_ahead + r'(?P<year>' + _yd + r'+)年'
|
||||
_year_ahead = r'(?=' + _yd + r'+' + _year_suffix + r'|元年)'
|
||||
era_year = _known_era_group + _year_ahead + r'(?P<year>' + _yd + r'+)' + _year_suffix
|
||||
era_yuan = _known_era_group + _year_ahead + r'元年'
|
||||
patterns = [
|
||||
re.compile(dynasty_part + boundary + era_year),
|
||||
@@ -418,7 +422,8 @@ def extract_era_years(text):
|
||||
|
||||
# === 1. 民国 ===
|
||||
minguo_pattern = re.compile(
|
||||
r'民[国國]\s*([〇零一二三四五六七八九十百廿卄卅卌元\d0-9壹貳贰叁肆伍陸陆柒捌玖拾]+)\s*年'
|
||||
r'民[国國]\s*([〇零一二三四五六七八九十百廿卄卅卌元\d0-9壹貳贰叁肆伍陸陆柒捌玖拾]+)\s*'
|
||||
+ _year_suffix
|
||||
+ _mg_gy_paren
|
||||
)
|
||||
for m in minguo_pattern.finditer(simplified_text):
|
||||
|
||||
Reference in New Issue
Block a user