<p>我不认为正则表达式是解决这个问题的最佳方法。我喜欢更一般的解决方案。其他答案取决于以下一个或多个因素:</p>
<ol>
<li>一个人总有4种属性。你知道吗</li>
<li>每个人都有相同的属性。你知道吗</li>
<li>属性的顺序总是相同的。你知道吗</li>
</ol>
<p>如果这些在你的例子中是真的,那么regex就可以了。你知道吗</p>
<p>我的解决方案比较冗长,但并不依赖于这些。它处理混合/缺失属性、混合顺序,并能够设置和获取任何属性值。您甚至可以稍微扩展它,如果需要,还可以支持新的属性或人员插入。你知道吗</p>
<p>我的代码:</p>
<pre><code># i omitted "data = your string" here
def data_value(person_name, prop_name, new_value = None):
global data
start_person = data.find("Name=" + person_name + "\n")
while start_person != -1:
end_person = data.find("Name=", start_person + 1)
start_value = data.find(prop_name + "=", start_person, end_person)
if start_value != -1:
start_value += len(prop_name) + 1
end_value = data.find("\n", start_value, end_person)
if new_value == None:
return data[start_value:end_value]
else:
data = data[:start_value] + str(new_value) + data[end_value:]
start_person = data.find("Name=" + person_name + "\n", end_person)
return None
print data_value("Mark", "Pay") # Output: None (missing person)
print data_value("Bob", "Weight") # Output: None (missing property)
print data_value("Bob", "Pay") # Output: "500" (current value)
data_value("Bob", "Pay", 1234) # (change it)
print data_value("Bob", "Pay") # Output: "1234" (new value)
data_value("John", "Pay", 555) # (change it in both Johns)
</code></pre>