50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
import re
|
|
|
|
# Test the specific failing case
|
|
test_text = 'FemaleBrookville HighMouse'
|
|
pattern = r'^(Female|Male)(.+?)([A-Z][a-z]+)$'
|
|
|
|
print(f"Testing: {test_text}")
|
|
print(f"Pattern: {pattern}")
|
|
|
|
match = re.match(pattern, test_text)
|
|
if match:
|
|
print("✅ MATCH!")
|
|
print(f"Groups: {match.groups()}")
|
|
print(f"Group 1 (gender): {match.group(1)}")
|
|
print(f"Group 2 (school): {match.group(2)}")
|
|
print(f"Group 3 (last_name): {match.group(3)}")
|
|
else:
|
|
print("❌ NO MATCH")
|
|
|
|
# Let's try a more specific pattern
|
|
print("\nTrying more specific pattern...")
|
|
pattern2 = r'^(Female|Male)([A-Z][a-z]+(?:\s+[A-Z][a-z]+)*\s+(?:High|School|Academy|Middle|Elementary))\s*([A-Z][a-z]+)$'
|
|
match2 = re.match(pattern2, test_text)
|
|
if match2:
|
|
print("✅ MATCH with specific pattern!")
|
|
print(f"Groups: {match2.groups()}")
|
|
else:
|
|
print("❌ NO MATCH with specific pattern")
|
|
|
|
# Let's see what happens if we split on space
|
|
parts = test_text.split()
|
|
print(f"\nSplit on space: {parts}")
|
|
|
|
# Let's try to manually parse it
|
|
if test_text.startswith(('Female', 'Male')):
|
|
gender = 'Female' if test_text.startswith('Female') else 'Male'
|
|
remaining = test_text[len(gender):]
|
|
print(f"Gender: {gender}")
|
|
print(f"Remaining: {remaining}")
|
|
|
|
# Look for school keywords
|
|
school_keywords = ['High', 'School', 'Academy', 'Middle', 'Elementary']
|
|
for keyword in school_keywords:
|
|
if keyword in remaining:
|
|
keyword_pos = remaining.find(keyword) + len(keyword)
|
|
school = remaining[:keyword_pos]
|
|
last_name = remaining[keyword_pos:]
|
|
print(f"School: {school}")
|
|
print(f"Last name: {last_name}")
|
|
break |