public class Program
{
static void Main(string[] args)
{
string input = "104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100";
String output = String.Empty;
foreach (var item in input.Split(',').ToArray())
{
int unicode = Convert.ToInt32(item);
var converted = char.ConvertFromUtf32(unicode);
output += converted;
}
Console.WriteLine(output);
Console.ReadLine();
}
}
我有这个正则表达式 可以找到
\b(0?[1-9]){4}
但不是
1234
找到01234,且超过4位数字
我的正则表达式的哪一部分错了?
答案 0 :(得分:4)
正则表达式的问题在于,您为{0}匹配指定了import os
import xlsxwriter
def write_captions_to_excel_file(data_list, description_path, headers):
workbook = xlsxwriter.Workbook(os.path.join(description_path, 'all_captions.xlsx'))
worksheet = workbook.add_worksheet()
for row, data in enumerate(data_list):
for col, header in enumerate(headers):
if header == 'Titles':
text_to_write = data[header]
else:
text_to_write = data[header].h1.getText().capitalize()
worksheet.write(row+1, col, text_to_write)
def some_function():
headers = ['Image name', 'Titles', 'Description']
description_path = 'some/path/to/file'
filenames = ['x', 'y', 'z']
titles = ['z', 'y', 'x']
data_list = []
for i, j in enumerate(filenames):
combined_dict = dict()
combined_dict['Image name'] = j
combined_dict['Titles'] = titles[i]
data_list.append(combined_dict)
write_captions_to_excel_file(data_list, description_path, headers)
,这意味着0或1个匹配项。因此,您可以匹配5位数的字符串(以及更大的字符串)。
问题是?
贡献0或1,然后您的?
测试总是贡献1。您进行了4次匹配,因此可以匹配从4位到8位的任何内容数字字符串。
这是一个更简单的版本,您可以使用https://regexr.com/进行测试。
1-9
这将根据需要在第一个位置测试0-9,然后在接下来的3个位置测试1-9。
\b[0-9][1-9]{3}\b
答案 1 :(得分:3)
您的量词用于整个组,因此您也可以将01020304
与当前的正则表达式匹配。
在这种情况下,最简单的解决方案似乎是一种替代方案:
\b(?:0[1-9]{3}|[1-9]{4})\b
请注意,这将不匹配包含0
之类的数字,例如3000
。
但是,如果您只是想确保不匹配0000
,则可以改用超前行
\b(?!0{4})\d{4}\b