OK, this one is driving me nuts.... I have a string that is formed thus:
var newContent = string.Format("({0})\n{1}", stripped_content, reply)
newContent will display like:
(old text)
new text
I need a regular expression that strips away the text between parentheses with the parenthesis included AND the newline character.
The best I can come up with is:
const string regex = @"^(\(.*\)\s)?(?<capture>.*)";
var match= Regex.Match(original_content, regex);
var stripped_content = match.Groups["capture"].Value;
This works, but I want specifically to match the newline ( \\n
), not any whitespace ( \\s
) Replacing \\s
with \\n
\\\\n
or \\\\\\n
does NOT work.
Please help me hold on to my sanity!
EDIT: an example:
public string Reply(string old,string neww)
{
const string regex = @"^(\(.*\)\s)?(?<capture>.*)";
var match= Regex.Match(old, regex);
var stripped_content = match.Groups["capture"].Value;
var result= string.Format("({0})\n{1}", stripped_content, neww);
return result;
}
Reply("(messageOne)\nmessageTwo","messageThree") returns :
(messageTwo)
messageThree
If you specify RegexOptions.Multiline then you can use ^
and $
to match the start and end of a line, respectively.
If you don't wish to use this option, remember that a new line may be any one of the following: \\n
, \\r
, \\r\\n
, so instead of looking only for \\n
, you should perhaps use something like: [\\n\\r]+
, or more exactly: (\\n|\\r|\\r\\n)
.
实际上它可以工作,但选项相反
RegexOptions.Singleline
You are probably going to have a \\r before your \\n. Try replacing the \\s with (\\r\\n).
If you're trying to match line endings then you may find
Regex.Match("string", "regex", RegexOptions.Multiline)
helps
Think I may be a bit late to the party, but still hope this helps.
I needed to get multiple tokens between two hash signs.
Example i/p:
## token1 ##
## token2 ##
## token3_a
token3_b
token3_c ##
This seemed to work in my case:
var matches = Regex.Matches (mytext, "##(.*?)##", RegexOptions.Singleline);
Of course, you may want to replace the double hash signs at both ends with your own chars.
HTH.
Counter-intuitive as it is, you could use both Multiline
and Singleline
option.
Regex.Match(input, @"(.+)^(.*)", RegexOptions.Multiline | RegexOptions.Singleline)
First capturing group will contain first line (including \\r
and \\n
) and second group will have second line.
Multiline
:
^
and$
match the beginning and end of each line (instead of the beginning and end of the input string).
Singleline
:
The period (
.
) matches every character (instead of every character except\\n
)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.