我需要格式化几个类。我需要将using指令放在命名空间中。换句话说,我必须改变:
// some comment about system
using System;
using System.Collections.Generics; // needed to create lists
namespace MyNamespace
{
... code
成:
namespace MyNamespace
{
// some comment about system
using System;
using System.Collections.Generics; // needed to create lists
... code
所以简而言之,我希望能够匹配:
// some comment about system
using System;
using System.Collections.Generics; // needed to create lists
(?s)(//.*?(?=\r))(\r\n|^)*using .*?;
第一组(//.*?(?=\r))(\r\n|^)
与评论相匹配。所以如果使用有评论我也想发表评论。请注意,我在组的末尾放置了*
,以便有0个或更多注释。由于某种原因第二次使用不符合原因?
答案 0 :(得分:1)
尝试正则表达式(?s)((//[^\n\r]*)\s*?)*((using [^;]+;)\s*?)+
答案 1 :(得分:0)
你真的需要正则表达式吗?为什么不使用普通字符串函数?您只需要在using
之前找到注释和namespace
指令,并将它们移到它后面(并可能缩进)。
类似的东西:
//
开头(可能在空白之后),请记住它(这是评论)/*
到*/
)比较棘手。using
开头,请记住namespace
开头,请将其打印,打印所有记住的行,然后打印其余部分。答案 2 :(得分:0)
如果你在哪里有类似的东西:
// comment goes here
using System.Text.RegularExpressions; // for regexes
using System.Text; /* comment */
using System.Collections.Generic; // som comment
/* this is a long comment
that spans multiple lines
in order to explain this using */
using System.Foo;
namespace EncloseCodeInRegion
{
正则表达式:
(((//.*?\r\n)|( */\*[\s\S]*?\*/))?(\r\n)? *using .+?;(( *//.*(?=\r))|( */\*[\s\S]*?\*/))?)(?=[\s\S]*?namespace)
将匹配所有using语句。