Вы можете использовать Expression.AndAlso / OrElse для объединения логических выражений, но вы должны убедиться, что значения параметра одинаковы.
У меня были проблемы с EF и PredicateBuilder , поэтому я сделал свой собственный, не прибегая к Invoke, чтобы я мог использовать вот так:
var filterC = filterA.And(filterb);
Исходный код для моего PredicateBuilder:
public static class PredicateBuilder {
public static Expression> And(this Expression> a, Expression> b) {
ParameterExpression p = a.Parameters[0];
SubstExpressionVisitor visitor = new SubstExpressionVisitor();
visitor.subst[b.Parameters[0]] = p;
Expression body = Expression.AndAlso(a.Body, visitor.Visit(b.Body));
return Expression.Lambda>(body, p);
}
public static Expression> Or(this Expression> a, Expression> b) {
ParameterExpression p = a.Parameters[0];
SubstExpressionVisitor visitor = new SubstExpressionVisitor();
visitor.subst[b.Parameters[0]] = p;
Expression body = Expression.OrElse(a.Body, visitor.Visit(b.Body));
return Expression.Lambda>(body, p);
}
}
И класс утилиты для замены параметры в лямбда:
internal class SubstExpressionVisitor : System.Linq.Expressions.ExpressionVisitor {
public Dictionary subst = new Dictionary();
protected override Expression VisitParameter(ParameterExpression node) {
Expression newValue;
if (subst.TryGetValue(node, out newValue)) {
return newValue;
}
return node;
}
}
Вот мой дубль. Если вам не нужно регулярное выражение, вы можете использовать -like или .contains (). Вопрос никогда не говорит, что такое шаблон поиска. Вот пример с текстовым файлом Windows.
$file = (get-content -raw file.txt) -replace "`r" # avoid the line ending issue
$pattern = 'two
three
f.*' -replace "`r"
# just showing what they really are
$file -replace "`r",'\r' -replace "`n",'\n'
$pattern -replace "`r",'\r' -replace "`n",'\n'
$file -match $pattern
$file | select-string $pattern -quiet
В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
$fileContent = [io.file]::ReadAllText("c:\file.txt")
$fileContent |
Select-String '(?smi)ap71xx[^!]+!' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
$fileContent |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Value }
Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
$fileContent |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Value }
Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Value }
Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
$fileContent |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Groups[1] } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[112].Value }
.Matches } |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет достаточно следующего:
[110] Регулярное выражение ap71xx[^!]*!
будет работать лучше, и использование .*
в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+!
будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.
Если в выходных данных начало блока не требуется, обновленный сценарий:
[111] Groups[0]
содержит всю совпавшую строку, Groups[1]
будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.
Если $fileContent
не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:
[io.file]::ReadAllText("c:\file.txt") |
Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
%{ В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет дос