我想
输入文字:
N-Acetyl-cysteine used Yes or no?No.
Acetic acid used Yes or no?Y.
NBI used Yes or no? Y.
Diaphragmatic pinch:40cm
: Y -33cm.
Inlet patch - Yes or No: N.
No loss of stain.
所需的输出
Acetic acid used Yes or no?Y.
NBI used Yes or no? Y.
Diaphragmatic pinch:40cm
: Y -33cm.
目前在r中的尝试:
gsub(".*[Nn][Oo](?![:]|[?]).*?(\\.|\n|:|$)", "", x[, y], perl = T)
结果:
N-Acetyl-cysteine used Yes or no?No.
Acetic acid used Yes or no?Y.
NBI used Yes or no? Y.
Diaphragmatic pinch:40cm
: Y -33cm.
Inlet patch - Yes or No: N.
然后
gsub(".*[Nn][Oo](:|\\?)(\\s*).*?(\\.|\n|:|$)", "", x[, y])
结果:
Diaphragmatic pinch:40cm
: Y -33cm.
第一个gsub工作正常,但第二个没有消除太多。有更好的方法吗?
答案 0 :(得分:1)
您的第二个要求应该包括冒号或问号与N
之间的可选空格。
正则表达式必须看起来像
.*(?:no(?![?:])|[?:]\s*N).*\R*
请参阅regex demo
<强>详情
.*
- 除了换行符之外的任何0 +字符(?:no(?![?:])|[?:]\s*N)
- 与两种选择中的任何一种匹配的非捕获交替组:
no(?![?:])
- no
未跟?
或:
|
- 或[?:]\s*N
- ?
或:
,0 +个空格,N
.*
- 其余部分\R*
- 任何0 +换行符序列。 perl=TRUE
参数使R使用PCRE正则表达式引擎解析模式,ignore.case=TRUE
参数使模式不区分大小写。
以下是fixed R code:
x <- "N-Acetyl-cysteine used Yes or no?No.
Acetic acid used Yes or no?Y.
NBI used Yes or no? Y.
Diaphragmatic pinch:40cm
: Y -33cm.
Inlet patch - Yes or No: N.
No loss of stain."
cat(gsub(".*(?:no(?![?:])|[?:]\\s*N).*\\R*", "", x, perl=TRUE, ignore.case=TRUE), sep="\n")
输出:
Acetic acid used Yes or no?Y.
NBI used Yes or no? Y.
Diaphragmatic pinch:40cm
: Y -33cm.