<p>使用正则表达式的不同方法(我知道)</p>
<pre><code>import re
def process_input(string: str) -> str:
string = string.strip()
# Preset some values.
ln, fn, prep = "", "", ""
# if the string is blank, return it
# Otherwise, continue.
if len(string) > 0:
# Search for possible delimiter.
res = re.search(r"([^a-z0-9-'\. ]+)", string, flags = re.I)
# If delimiter found...
if res:
delim = res.group(0)
# Split names by delimiter and strip whitespace.
ln, fn, *err = [s.strip() for s in re.split(delim, string)]
else:
# Split on whitespace
names = [s.strip() for s in re.split(r"\s+", string)]
# If first, preposition, last exist or first and last exist.
# update variables.
# Otherwise, raise ValueError.
if len(names) == 3:
fn, prep, ln = names
elif len(names) == 2:
fn, ln = names
else:
raise ValueError("First and last name required.")
# Check for whitespace in last name variable.
ws_res = re.search(r"\s+", ln)
if ws_res:
# Split last name if found.
prep, ln, *err = re.split(r"\s+", ln)
# Create array of known names.
output = [f"{ln},", fn, ln]
# Insert prep if it contains a value
# This is simply a formatting thing.
if len(prep) > 0:
output.insert(2, prep)
# Output formatted string.
return " ".join(output)
return string
if __name__ == "__main__":
# Loop until q called or a max run amout is reached.
re_run = True
max_runs = 10
while re_run or max_runs > 0:
print("Please enter your full name\nor press [q] to exit:")
user_input = input()
if user_input:
if user_input.lower().strip() == "q":
re_run = False
break
result = process_input(user_input)
print("\n" + result + "\n\n")
max_runs -= 1
</code></pre>