遍历字符串并将模式移动到每个列表元素的开头
iterate over strings and move pattern to start of each list element
我有一个 names
的列表,但标题 Dr.
的位置错误。
所以我想
- 遍历列表元素以将
Dr.,
或 Dr.
替换为
- 同时 adding/moving
Dr.
到相应字符串的开头。
我的结果很令人失望。 re.sub()
是正确的方法吗?
names = ['Johnson, Dr., PWE', 'Peterson, FDR', 'Gaber, Dr. GTZ']
for idx, item in enumerate(names):
names[idx] = re.sub(r' Dr.(,)? ', ' Dr. ', item)
print(names)
['Johnson, Dr. PWE', 'Peterson, FDR', 'Gaber, Dr. GTZ']
desired_names = ['Dr. Johnson, PWE', 'Peterson, FDR', 'Dr. Gaber, GTZ']
您可以使用 2 个捕获组,并使用在替换中还原的那些来获得正确的顺序。
([^,\n]+,\s*)(Dr\.),?\s*
([^,\n]+,\s*)
捕获除 ,
之外的任何字符或 组 1 中的换行符,然后匹配逗号和可选的空白字符
(Dr\.)
在 组 2 中捕获 Dr.
,?\s*
匹配可选的逗号和空白字符
例子
import re
names = ['Johnson, Dr., PWE', 'Peterson, FDR', 'Gaber, Dr. GTZ']
for idx, item in enumerate(names):
names[idx] = re.sub(r'([^,\n]+,\s*)(Dr\.),?\s*', r' ', item)
print(names)
输出
['Dr. Johnson, PWE', 'Peterson, FDR', 'Dr. Gaber, GTZ']
我有一个 names
的列表,但标题 Dr.
的位置错误。
所以我想
- 遍历列表元素以将
Dr.,
或Dr.
替换为 - 同时 adding/moving
Dr.
到相应字符串的开头。
我的结果很令人失望。 re.sub()
是正确的方法吗?
names = ['Johnson, Dr., PWE', 'Peterson, FDR', 'Gaber, Dr. GTZ']
for idx, item in enumerate(names):
names[idx] = re.sub(r' Dr.(,)? ', ' Dr. ', item)
print(names)
['Johnson, Dr. PWE', 'Peterson, FDR', 'Gaber, Dr. GTZ']
desired_names = ['Dr. Johnson, PWE', 'Peterson, FDR', 'Dr. Gaber, GTZ']
您可以使用 2 个捕获组,并使用在替换中还原的那些来获得正确的顺序。
([^,\n]+,\s*)(Dr\.),?\s*
([^,\n]+,\s*)
捕获除,
之外的任何字符或 组 1 中的换行符,然后匹配逗号和可选的空白字符(Dr\.)
在 组 2 中捕获 ,?\s*
匹配可选的逗号和空白字符
Dr.
例子
import re
names = ['Johnson, Dr., PWE', 'Peterson, FDR', 'Gaber, Dr. GTZ']
for idx, item in enumerate(names):
names[idx] = re.sub(r'([^,\n]+,\s*)(Dr\.),?\s*', r' ', item)
print(names)
输出
['Dr. Johnson, PWE', 'Peterson, FDR', 'Dr. Gaber, GTZ']