使用Python,您可以在替换文本之前检查组是否为空?
示例:
[user] John Marshal --> [user]<br><strong>Jonh Marshal<strong>
John Marshal --> <strong>Jonh Marshal<strong>
正则表达式应该使用这个,但是使用“条件”来插入&lt; BR&GT;只有找到第1组。
title = re.sub(r'^\s*(\[.*?\])?\s*(.*)', r'\1<br><strong>\2</strong>', title)
答案 0 :(得分:8)
第一组始终,因为您允许空匹配。
您希望匹配至少一个字符,而不是0或更多字符,因此请使用.+?
:
title = re.sub(r'^\s*(\[.+?\])?\s*(.*)', r'\1<br><strong>\2</strong>', title)
现在,如果缺少第一组,匹配将抛出异常。利用它:
try:
title = re.sub(r'^\s*(\[.+?\])?\s*(.*)', r'\1<br><strong>\2</strong>', title)
except re.error:
title = re.sub(r'^\s*(.*)', r'<strong>\1</strong>', title)
另一种方法是使用函数进行替换:
def title_sub(match):
if match.group(1):
return '{}<br><strong>{}</strong>'.format(*match.groups())
return '<strong>{}</strong>'.format(match.group(2))
title = re.sub(r'^\s*(\[.+?\])?\s*(.*)', title_sub, title)
演示:
>>> re.sub(r'^\s*(\[.+?\])?\s*(.*)', title_sub, '[user] John Marshal')
'[user]<br><strong>John Marshal</strong>'
>>> re.sub(r'^\s*(\[.+?\])?\s*(.*)', title_sub, 'John Marshal')
'<strong>John Marshal</strong>'
答案 1 :(得分:0)
要在Python中使用正则表达式进行条件替换,我想出了以下解决方案:
@classmethod
def normalize_query_string(cls, query_string):
def replace_fields(match):
x = match.group("field")
if x == "$certHash":
return "ci.C.H:"
return "{}:".format(x)
result = re.sub(r"(?P<field>\$[\w.]+):", replace_fields, query_string)
return result