Вам нужно использовать это регулярное выражение, чтобы получить то, что вы хотите,
[^_]*_[^_]*\.xml
Проверьте этот код Python, [ 1113]
import re
arr = ['AB_x-y-z_XX1234567890_84481.xml','x-y-z_XX1234567890_84481.xml','XX1234567890_84481.xml']
for s in arr:
m = re.search(r'[^_]*_[^_]*\.xml', s)
if (m):
print(m.group(0))
Prints,
XX1234567890_84481.xml
XX1234567890_84481.xml
XX1234567890_84481.xml
Проблема в вашем регулярном выражении (_.+)?\.xml$
состоит в том, что часть (_.+)?
начнет совпадать с первого _
и будет сопоставлять что угодно, пока не увидит литерал .xml
и все это тоже необязательно, за ним следует ?
. Благодаря этому в строке _x-y-z_XX1234567890_84481.xml
он также будет соответствовать _x-y-z_XX1234567890_84481
, что не соответствует желаемому поведению.
public string GetAsCsv(Func<CheckBox, string> getValue)
{
var buffer = new StringBuilder();
foreach (var cb in SelectedCheckBoxes)
{
buffer.Append(getValue(cb)).Append(",");
}
return DropLastComma(buffer.ToString());
}
Тогда: